我正在尝试读取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.任何想法?
答案 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位数字,或者你期望一系列的数字)。