gpt4 book ai didi

arrays - 将 float 数组从 MATLAB 发送到 Arduino

转载 作者:行者123 更新时间:2023-12-03 21:29:29 24 4
gpt4 key购买 nike

我想从 MATLAB 向 Arduino 发送一个由三个 float 组成的数组。我试图通过将这些值从 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”被正确返回。我如何调整它以读取数组中的所有数字?

最佳答案

首先,如果您尝试将参数作为 float 传递,则可能应该在 MATLAB 代码中使用 '%f' 作为格式说明符。

接下来,您需要等待串行数据变得可用,然后再尝试解析 float 。

float parameters[3];

void setup(){
Serial.begin(9600);
while(!Serial || Serial.available() <= 0);
for (int i=0; i<3; i++){
parameters[i] = Serial.parseFloat();
}
}
void loop(){
for(size_t i=0; i<3; ++i){
Serial.print(parameters[i]);
Serial.print(i<2 ? '\t' : '\n');
}
}

如果由于某种原因仍然无法正常工作,您可以尝试检查串行数据是否正确到达arduino:

void setup(){
Serial.begin(9600);
while(!Serial || Serial.available() <= 0);
while(Serial.available() > 0){
Serial.print(Serial.read());
}
}
void loop(){}

如果由于某些奇怪的原因仍然不起作用,您可以随时尝试以另一种方式将数据解析为 float 。这是一个简单的例子:

float parameters[3];

void setup(){
Serial.begin(9600);
while(!Serial);

while(Serial.available() <= 0);
for(int i=0; i<3; ++i){
String param_string = "";
int c;
while( (c = Serial.read()) >= 0 ){
if((char)c == '\n') break;
param_string += (char)c;
}
parameters[i] = param_string.toFloat();
}
}

void loop(){
for(size_t i=0; i<3; ++i){
Serial.print(parameters[i]);
Serial.print(i<2 ? '\t' : '\n');
}
}

关于arrays - 将 float 数组从 MATLAB 发送到 Arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42143529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com