2013-07-09 2 views
0

Я пытаюсь прочитать значения от двух датчиков (на моем arduino), которые отправляются на последовательный порт, с помощью кода matlab ниже. Однако, это ошибки, говорящие ??? Attempted to access sensor1(1); index out of bounds because numel(sensor1)=0, и если ошибка не возникает, результаты неточны. Я знаю это, потому что я просто послал 1 и 2 в качестве значений датчика в com-порт, и в результате два массива содержали некоторые нули (когда нужно было все 1 и 2 все 2). Спасибо, любая помощь будет очень признательна.Matlab, читаемый из последовательного порта с определенной частотой дискретизации

Вот мой 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); 


} 

ответ

1

Вы можете попробовать использовать это прежде, чем ваши заявления fscanf:

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

Это будет до того, как вы их прочитаете, до двух байтов в последовательном буфере.

PS: Если вы отправляете номера, вам лучше отправлять их как цифры, а не как строку - вам нужно будет отправить три байта для представления 101 - по одному для каждой цифры - в то время как это может быть отправлено как единое целое байт. Используйте fwrite и fread для этого в Matlab, Serial.write и Serial.read на Arduino.