从Matlab到arduino的连续读取

时间:2014-05-05 16:20:24

标签: matlab serialization serial-port arduino

我正在尝试读取arduino中1到999之间的整数值,该数字是从matlab串行发送的。我在arduino上的代码是:

   while (Serial.available() <= 0) {
     Serial.println('A', BYTE);   // send a capital A
     delay(300);
   }
   dec = Serial.read();
   Serial.print("I recieved: ");
   Serial.println(dec);

我在Matlab上发送的代码如下:

numSec = 408;

s1 = serial('COM3');    % define serial port
s1.BaudRate=9600;               % define baud rate
set(s1, 'terminator', 'LF');   
% define the terminator for println
fopen(s1);

try                             % use try catch to ensure fclose
                                % signal the arduino to start collection
w=fscanf(s1,'%s');              % must define the input % d or %s, etc.
if (w=='A')
    display(['Collecting data']);
    %fprintf(s1,'%2d\n',numSec);     % establishContact
    fwrite(s1, numSec);
end

disp(fscanf(s1,'%s'));

结果是:

 Collecting data 
 I recieved:255

我要发送的号码是408.任何想法?

2 个答案:

答案 0 :(得分:1)

我发现使用Serial.parseInt()会读取您需要的所有内容。我最后还是通过使用Serial.parseFloat()读取了一个浮点数。它实际上是读取它直到达到非int或非浮点字符。

在matlab上我最后只使用了fprintf(s1,&#39;%d \ n&#39;,numSec);

答案 1 :(得分:0)

Serial.read只能读取一个字节,该字节可以在0到255之间。您需要将您的号码作为3个ascii字符发送,52 48 56,读取它们使用do...while循环,然后将它们解析为数字。你如何做到这一点的细节将取决于你的确切应用(即,你总是期望一个3位数字,或者你期望一系列的数字)。