我有一个通过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')''',因为,也许第一个数据包将丢失,但接下来的另一个数据包将始终保持连接状态而不会破坏它们(我抓住了整条线)。但是也有同样的错误,所以我认为我的小经验无法帮助解决问题。我需要你的帮助。
对不起我的英语,谢谢您的帮助。
我有一个通过I2C协议与Arduino连接的MPU6050陀螺仪和加速度计。这些传感器使用这些指令将连续数据流发送到串行端口(在arduino ...
您走在正确的轨道上。这里有一些指针: