Matlab 如何在长时间间隔录制时停止跳过数据?

Matlab 如何在长时间间隔录制时停止跳过数据?,matlab,arduino,Matlab,Arduino,我用arduino实时记录10个Pt100的温度 我的代码在较短的时间间隔(例如10分钟)内运行良好,但在较长的时间间隔(例如2-7小时)内,特别是在记录的第63个温度上,Matlab不会从串行打印中提取完整的字符串,不管我将其设置为什么样的采样率(我尝试了2.5分钟、1分钟和5分钟),它总是在第63条数据处停止工作-特别是来自fscanf的y变量中只有2个值-一个正常温度值和2个 我修改了代码,当y字符串不是预期的10个温度值时,它只绘制10个NaN值并继续运行。从这一点开始,无论我将采样率设

我用arduino实时记录10个Pt100的温度

我的代码在较短的时间间隔(例如10分钟)内运行良好,但在较长的时间间隔(例如2-7小时)内,特别是在记录的第63个温度上,Matlab不会从串行打印中提取完整的字符串,不管我将其设置为什么样的采样率(我尝试了2.5分钟、1分钟和5分钟),它总是在第63条数据处停止工作-特别是来自fscanf的y变量中只有2个值-一个正常温度值和2个

我修改了代码,当y字符串不是预期的10个温度值时,它只绘制10个NaN值并继续运行。从这一点开始,无论我将采样率设置为什么,它都无法准确记录每4个样本的10个温度值

全部清除;
clc;
删除(instrfindall);%预先关闭所有端口
b=串行('COM7','BaudRate',1000000);%COM是Arduino的COM端口
%刷新输入缓冲区
flushinput(b);
fopen(b);%启动arduino通讯
%%创建图形窗口以监视实时数据
Tmax=24*60*60;%数据收集的总时间(秒)
图形
网格上,
xlabel(“时间”),ylabel(“温度(K)”,
%轴([0 Tmax+1]),
%%从Arduino读取并绘制数据
Ts=150;%采样时间(秒)
ii=0;
dataa=0;
datab=0;
t=0;
tic%启动计时器
mData=[];
而toc 1
x=[t(ii-1)t(ii)];
%传感器不工作时arduino输出的两个值
%附件为38.98和1261.79-使用将这些值更改为0
%逻辑
y1=[(t1(ii-1)*(t1(ii-1)~=30.98)*(t1(ii-1)~=1261.79))(t1(ii)*(t1(ii)~=30.98)*(t1(ii)~=1261.79));
y2=[(t2(ii-1)*(t2(ii-1)~=30.98)*(t2(ii-1)~=1261.79))(t2(ii)*(t2(ii)~=30.98)*(t2(ii)~=1261.79));
y3=[(t3(ii-1)*(t3(ii-1)~=30.98)*(t3(ii-1)~=1261.79))(t3(ii)*(t3(ii)~=30.98)*(t3(ii)~=1261.79));
y4=[(t4(ii-1)*(t4(ii-1)~=30.98)*(t4(ii-1)~=1261.79))(t4(ii)*(t4(ii)~=30.98)*(t4(ii)~=1261.79));
y5=[(t5(ii-1)*(t5(ii-1)~=30.98)*(t5(ii-1)~=1261.79))(t5(ii)*(t5(ii)~=30.98)*(t5(ii)~=1261.79));
y6=[(t6(ii-1)*(t6(ii-1)~=30.98)*(t6(ii-1)~=1261.79))(t6(ii)*(t6(ii)~=30.98)*(t6(ii)~=1261.79));
y7=[(t7(ii-1)*(t7(ii-1)~=30.98)*(t7(ii-1)~=1261.79))(t7(ii)*(t7(ii)~=30.98)*(t7(ii)~=1261.79));
y8=[(t8(ii-1)*(t8(ii-1)~=30.98)*(t8(ii-1)~=1261.79))(t8(ii)*(t8(ii)~=30.98)*(t8(ii)~=1261.79));
y9=[(t9(ii-1)*(t9(ii-1)~=30.98)*(t9(ii-1)~=1261.79))(t9(ii)*(t9(ii)~=30.98)*(t9(ii)~=1261.79));
y10=[(t10(ii-1)*(t10(ii-1)~=30.98)*(t10(ii-1)~=1261.79))(t10(ii)*(t10(ii)~=30.98)*(t10(ii)~=1261.79));
%将零值替换为nan,以便不会打印它们
y1(y1==0)=nan;
y2(y2==0)=nan;
y3(y3==0)=nan;
y4(y4==0)=nan;
y5(y5==0)=nan;
y6(y6==0)=nan;
y7(y7==0)=nan;
y8(y8==0)=nan;
y9(y9==0)=nan;
y10(y10==0)=nan;
行(x,y1,‘颜色’、‘红色’)
线条(x,y2,'颜色','蓝色')
行(x,y3,'颜色','黑色')
线条(x,y4,'颜色','洋红')
行(x,y5,'颜色','绿色')
线条(x,y6,'颜色','蓝色')
行(x,y7,'颜色','红色')
线条(x,y8,'颜色','青色')
行(x,y9,'颜色','黑色')
线条(x,y10,'颜色','洋红')
图例('T1','T2','T3','T4','T5','T6','T7','T8','T9','T10')
刷新屏幕
结束
结束
结束
fclose(b);
实际结果如下。非常感谢您的帮助

()

()

(编辑:图片来自mathworks,因为我上周在那里发布了相同的问题,但没有收到任何回复)


#包括
#包括
#包括
//使用软件SPI:CS、DI、DO、CLK
//Adafruit_MAX31865 max_1=Adafruit_MAX31865(A0,12,11,13);
//Adafruit_MAX31865 max_2=Adafruit_MAX31865(2,12,11,13);
//Adafruit_MAX31865 max_3=Adafruit_MAX31865(3,12,11,13);
//Adafruit_MAX31865 max_4=Adafruit_MAX31865(4,12,11,13);
//Adafruit_MAX31865 max_5=Adafruit_MAX31865(5,12,11,13);
//Adafruit_MAX31865 max_6=Adafruit_MAX31865(6,12,11,13);
//Adafruit_MAX31865 max_7=Adafruit_MAX31865(7,12,11,13);
//Adafruit_MAX31865 max_8=Adafruit_MAX31865(8,12,11,13);
//Adafruit_MAX31865 max_9=Adafruit_MAX31865(9,12,11,13);
//Adafruit_MAX31865 max_10=Adafruit_MAX31865(10,12,11,13);
//使用硬件SPI,只需传入CS引脚
Adafruit_MAX31865最大值_1=Adafruit_MAX31865(A0);
Adafruit_MAX31865 max_2=Adafruit_MAX31865(2);
Adafruit_MAX31865最大值_3=Adafruit_MAX31865(3);
Adafruit_MAX31865 max_4=Adafruit_MAX31865(4);
Adafruit_MAX31865 max_5=Adafruit_MAX31865(5);
Adafruit_MAX31865 max_6=Adafruit_MAX31865(6);
Adafruit_MAX31865最大值_7=Adafruit_MAX31865(7);
Adafruit_MAX31865 max_8=Adafruit_MAX31865(8);
Adafruit_MAX31865 max_9=Adafruit_MAX31865(9);
Adafruit_MAX31865 max_10=Adafruit_MAX31865(10);
//Rref电阻器的值。PT100使用430.0,PT1000使用4300.0
#定义RREF 430.0
//传感器的“标称”0摄氏度电阻
//PT100为100.0,PT1000为1000.0
#定义RNOMINAL 100.0
浮标凯尔文1;
浮法凯尔文2;
浮法凯尔文3;
浮法凯尔文4;
浮动开氏5;
浮动开氏6;
浮动凯尔文7;
浮标凯尔文8;
浮动开氏9;
浮动开氏度10;
无效设置(){
序列号开始(115200);
Wire.begin();
//Serial.println(“Adafruit MAX31865 PT100传感器测试!”);
max_1.begin(MAX31865_4WIRE);//根据需要设置为2WIRE或4WIRE
最大2.开始(最大31865线);
最大3。开始(最大31865线);
最大4。开始(最大31865线);
最大5。开始(最大31865线);
最大6。开始(最大31865线);
最大7开始(最大31865线);
最大8。开始(最大31865线);
最大9开始(最大31865线);
最大10开始(最大31865线);
}
void循环(){
uint16\u t rtd1=最大读取1

#include <Adafruit_MAX31865.h>
#include<SPI.h>
#include <Wire.h>



// Use software SPI: CS, DI, DO, CLK
//Adafruit_MAX31865 max_1 = Adafruit_MAX31865(A0,12,11,13);
//Adafruit_MAX31865 max_2 = Adafruit_MAX31865(2,12,11,13);
//Adafruit_MAX31865 max_3 = Adafruit_MAX31865(3,12,11,13);
//Adafruit_MAX31865 max_4 = Adafruit_MAX31865(4,12,11,13);
//Adafruit_MAX31865 max_5 = Adafruit_MAX31865(5,12,11,13);
//Adafruit_MAX31865 max_6 = Adafruit_MAX31865(6,12,11,13);
//Adafruit_MAX31865 max_7 = Adafruit_MAX31865(7,12,11,13);
//Adafruit_MAX31865 max_8 = Adafruit_MAX31865(8,12,11,13);
//Adafruit_MAX31865 max_9 = Adafruit_MAX31865(9,12,11,13);
//Adafruit_MAX31865 max_10 = Adafruit_MAX31865(10,12,11,13);

// use hardware SPI, just pass in the CS pin
Adafruit_MAX31865 max_1 = Adafruit_MAX31865(A0);
Adafruit_MAX31865 max_2 = Adafruit_MAX31865(2);
Adafruit_MAX31865 max_3 = Adafruit_MAX31865(3);
Adafruit_MAX31865 max_4 = Adafruit_MAX31865(4);
Adafruit_MAX31865 max_5 = Adafruit_MAX31865(5);
Adafruit_MAX31865 max_6 = Adafruit_MAX31865(6);
Adafruit_MAX31865 max_7 = Adafruit_MAX31865(7);
Adafruit_MAX31865 max_8 = Adafruit_MAX31865(8);
Adafruit_MAX31865 max_9 = Adafruit_MAX31865(9);
Adafruit_MAX31865 max_10 = Adafruit_MAX31865(10);


// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0
float kelvin1;
float kelvin2;
float kelvin3;
float kelvin4;
float kelvin5;
float kelvin6;
float kelvin7;
float kelvin8;
float kelvin9;
float kelvin10;

void setup() {
  Serial.begin(115200);
  Wire.begin();


  //Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
  max_1.begin(MAX31865_4WIRE);  // set to 2WIRE or 4WIRE as necessary
  max_2.begin(MAX31865_4WIRE);
  max_3.begin(MAX31865_4WIRE);
  max_4.begin(MAX31865_4WIRE);
  max_5.begin(MAX31865_4WIRE);
  max_6.begin(MAX31865_4WIRE);
  max_7.begin(MAX31865_4WIRE);
  max_8.begin(MAX31865_4WIRE);
  max_9.begin(MAX31865_4WIRE);
  max_10.begin(MAX31865_4WIRE);
}


void loop() {

  uint16_t rtd1 = max_1.readRTD();
  uint16_t rtd2 = max_2.readRTD();
  uint16_t rtd3 = max_3.readRTD();
  uint16_t rtd4 = max_4.readRTD();
  uint16_t rtd5 = max_5.readRTD();
  uint16_t rtd6 = max_6.readRTD();
  uint16_t rtd7 = max_7.readRTD();
  uint16_t rtd8 = max_8.readRTD();
  uint16_t rtd9 = max_9.readRTD();
  uint16_t rtd10 = max_10.readRTD();

  //  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio1 = rtd1;
  ratio1 /= 32768;
  float ratio2 = rtd2;
    ratio2 /= 32768;
    float ratio3 = rtd3;
    ratio3 /= 32768;
    float ratio4 = rtd4;
    ratio4 /= 32768;
    float ratio5 = rtd5;
    ratio5 /= 32768;
    float ratio6 = rtd6;
    ratio6 /= 32768;
    float ratio7 = rtd7;
    ratio7 /= 32768;
    float ratio8 = rtd8;
    ratio8 /= 32768;
    float ratio9 = rtd9;
    ratio9 /= 32768;
    float ratio10 = rtd10;
    ratio10 /= 32768;

  kelvin1 = (max_1.temperature(RNOMINAL, RREF)) + 273;
  kelvin2 = (max_2.temperature(RNOMINAL, RREF))+273;
    kelvin3 = (max_3.temperature(RNOMINAL, RREF))+273;
    kelvin4 = (max_4.temperature(RNOMINAL, RREF))+273;
    kelvin5 = (max_5.temperature(RNOMINAL, RREF))+273;
    kelvin6 = (max_6.temperature(RNOMINAL, RREF))+273;
    kelvin7 = (max_7.temperature(RNOMINAL, RREF))+273;
    kelvin8 = (max_8.temperature(RNOMINAL, RREF))+273;
    kelvin9 = (max_9.temperature(RNOMINAL, RREF))+273;
    kelvin10 = (max_10.temperature(RNOMINAL, RREF))+273;

  //Serial.print("Ratio = "); Serial.println(ratio1,8);
  Serial.print(kelvin1);
  Serial.print(", ");
  Serial.print(kelvin2);
    Serial.print(", ");
    Serial.print(kelvin3);
    Serial.print(", ");
    Serial.print(kelvin4);
    Serial.print(", ");
    Serial.print(kelvin5);
    Serial.print(", ");
    Serial.print(kelvin6);
    Serial.print(", ");
    Serial.print(kelvin7);
    Serial.print(", ");
    Serial.print(kelvin8);
    Serial.print(", ");
    Serial.print(kelvin9);
    Serial.print(", ");
    Serial.print(kelvin10);
    Serial.print(", ");


  Serial.println();

  /*
      // Check and print any faults
      uint8_t fault = max_1.readFault();
      if (fault) {
        Serial.print("Fault 0x"); Serial.println(fault, HEX);
        if (fault & MAX31865_FAULT_HIGHTHRESH) {
          Serial.println("RTD High Threshold");
        }
        if (fault & MAX31865_FAULT_LOWTHRESH) {
          Serial.println("RTD Low Threshold");
        }
        if (fault & MAX31865_FAULT_REFINLOW) {
          Serial.println("REFIN- > 0.85 x Bias");
        }
        if (fault & MAX31865_FAULT_REFINHIGH) {
          Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
        }
        if (fault & MAX31865_FAULT_RTDINLOW) {
          Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
        }
        if (fault & MAX31865_FAULT_OVUV) {
          Serial.println("Under/Over voltage");
        }
        max_1.clearFault();
      }
  */
  delay(50);

}

flushinput(b);