【发布时间】:2020-05-28 08:45:42
【问题描述】:
我有一个通过 I2C 协议与 Arduino 连接的 MPU6050 陀螺仪和加速度计。这些传感器使用这些指令(在 arduino IDE 中)将连续的数据流发送到串行端口:
Serial.print(euler[0] * 180/M_PI);
Serial.print(":");
Serial.print(euler[1] * 180/M_PI);
Serial.print(":");
Serial.println(euler[2] * 180/M_PI);
这来自传感器库中包含的示例草图,它只是将偏航/俯仰/滚动的值发送到串行端口,用冒号分隔。
现在是有趣的部分。我一直对可视化数据很着迷,所以我想为这些来自处理中的串行数据构建一个图表(这是一个更大的项目的一部分,其中包括一个超声波传感器,比如一种雷达)。
所以我写了一个关于处理的简短草图,以捕获该数据,以便对其进行分析和可视化。这是草图:
import processing.serial.*;
Serial myPort;
String data; //Angle values
String[] splitted; //Array containing splitted data
float yaw, pitch , roll;
void setup()
{
myPort = new Serial (this, Serial.list()[0], 115200);
}
void draw()
{
while (myPort.available() > 0) //data arrived fromm serial
{
data = myPort.readStringUntil('\n');
//Data Parsing
splitted = data.split(":");
yaw = float(splitted[0]);
pitch = float(splitted[1]);
roll = float(splitted[2]);
println(yaw + " " + pitch + " " + roll);
}
}
此代码不起作用。有 2 个错误交替出现。其中之一是:
ArrayIndexOutOfBondsException
还有一个:
NullPointerException
指向“拆分”的数组。
我想我有问题。在以前版本的处理草图中,我使用的是:
readString() function
我认为,由于一次将数据发送到 Arduino 草图中的串行端口,处理草图有时只捕获一个或两个偏航、俯仰、滚动值,导致数组索引崩溃或当没有值被添加到数组中时,nullPointerexception。然后,我将 '''readString''' 更改为 '''readStringUntil('\n')''',因为,也许第一个数据包会丢失,但下一个数据包将始终被连接而不会破坏它们(我赶上了整条线)。但是有同样的错误,所以我觉得我的小经验已经不能帮助解决问题了。我需要你的帮助。
对不起,我的英语不好,感谢您的帮助。
【问题讨论】:
标签: arduino serial-port processing data-visualization sensors