【发布时间】:2017-06-27 20:46:46
【问题描述】:
我想从 MATLAB 向 Arduino 发送一个包含三个浮点数的数组。我试图通过将这些值从 Arduino 发送回 MATLAB 来检查 Arduino 是否已接收到这些值。看来 Arduino 只正确读取了数组中的第一个元素。
我的数组,“参数”是:
measurement_interval = 5.0;
ec_ref_thickness = 2.0;
e_ref_thickness = 3.0;
parameters = [measurement_interval ec_ref_thickness e_ref_thickness];
我与 Arduino 建立了联系:
arduino = serial('COM4');
set(arduino,'DataBits',8);
set(arduino,'StopBits',1);
set(arduino,'BaudRate',9600);
set(arduino,'Parity','none');
fopen(arduino);
我使用以下方法将其发送给 Arduino:
fprintf(arduino, '%f', parameters);
fprintf(arduino, '\n');
在 Arduino 中我有:
float parameters[3]
void setup()
{
Serial.begin(9600);
while (Serial.available() == 0)
{
}
if (Serial.available() > 0)
{
for (int i=0; i < 3 ; i++)
{
parameters[i] = Serial.parseFloat();
}
Serial.flush();
}
我通过串口从 Arduino 发回:
void loop()
{
Serial.print(parameters[0])
Serial.print(" ");
Serial.print(parameters[1]);
Serial.print(" ");
Serial.print(parameters[2]);
}
在 MATLAB 中读为:
output = fscanf(arduino);
'输出'应该是[5.0 2.0 1.0]。但是,我得到的是 [5.00 0.00 0.00]
所以只有第一个元素 '5.0' 被正确返回。如何调整它以读取数组中的所有数字?
【问题讨论】:
-
Serial.read()读取单个字节。我不熟悉 Matlab,但我假设fprintf(arduino, '%d', parameters);打印一个表示单个整数值的字符串。而char parameters[3] = { '0','0','0'};显然不是浮点数组。 -
我已经阅读了
Serial.parseFloat(),但我不明白如何为我的案例实施它。 -
char parameters[3]是一个由 3 个char元素组成的数组。您是否尝试将三个floats 读入3 个chars?
标签: arrays matlab arduino serial-port