【问题标题】:Matlab reading from serial port at specific sampling rateMatlab以特定采样率从串口读取
【发布时间】:2013-07-09 05:34:52
【问题描述】:

我正在尝试从发送到串行端口的两个传感器(在我的 arduino 上)读取值,使用下面的 matlab 代码。但是,它错误地说??? Attempted to access sensor1(1); index out of bounds because numel(sensor1)=0,如果没有发生错误,则结果不准确。我知道这一点是因为我只是将 1 和 2 作为传感器值发送到 com 端口,结果两个数组也包含一些零(当一个应该全为 1 而另一个全为 2 时)。感谢任何帮助将不胜感激。

这是我的matlab代码:

close all;
clc;

fs = 1000;  % sampling frequency (samplings per second)
mt = 20;  % time for measurements

ind = 1;
nind = 1;

%Open serial port
delete(instrfind({'Port'},{'/dev/tty.usbmodem641'}));
serial_port=serial('/dev/tty.usbmodem641');
serial_port.BaudRate=115200;
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');

%Open serial port
fopen(serial_port); 

pause(2);

%Declare sample count
sample_count=1;


tic;
while toc < mt

    time(ind) = toc;

    sensor1=fscanf(serial_port,'%d')';
    sensor2=fscanf(serial_port,'%d')';

    channel1(ind) = (sensor1(1));
    channel2(ind) = (sensor2(1));

    % wait for appropriate time for next measurement
    while( nind == ind )
        nind = floor(toc*fs) + 1;
    end
    ind = nind;


end 

%close connection
 fclose(serial_port); 
 delete(serial_port);

这是我发送的 arduino 代码:

int sensor1=0;
int sensor2= 0;

void setup(){

  Serial.begin(115200);

}

void loop(){

  sensor1= 1;
  sensor2= 2;

  Serial.println(sensor1);
  Serial.println(sensor2);


}

【问题讨论】:

    标签: matlab serial-port usb arduino sampling


    【解决方案1】:

    您可以尝试在 fscanf 语句之前使用它:

    while(get(serial_port,'BytesToRead')<2) ; end
    

    这将等到串行缓冲区中有两个字节时再读取它们。

    PS:如果您要发送数字,最好将它们作为数字而不是作为字符串发送 - 您需要发送三个字节来表示 101 - 每个数字一个 - 虽然这可以作为单个字节发送.在 Matlab 中使用 fwrite 和 fread 执行此操作,在 Arduino 上使用 Serial.write 和 Serial.read。

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 2016-02-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      相关资源
      最近更新 更多