У меня есть гироскоп и акселерометр MPU6050, подключенные к Arduino по протоколу I2 C. Эти датчики отправляют непрерывный поток данных в последовательный порт с помощью следующих инструкций (в 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);
Это взято из примерного скетча, включенного в библиотеку датчика, и он просто отправляет значение yaw / pitch / roll к последовательному порту, разделенные двоеточием.
Теперь самое интересное. Я всегда увлекался визуализацией данных, и поэтому я хочу построить своего рода график этих данных, поступающих из последовательного порта в обработке (это часть более крупного проекта, который включает в себя ультразвуковой датчик c, вроде радара. ).
Итак, я написал небольшой набросок обработки, чтобы уловить эти данные с целью их анализа и визуализации. Это набросок:
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 по одному, скетч обработки иногда ловит только один , или два из значений рыскания, тангажа и крена, в результате чего индекс массива становится cra sh или nullPointerexception, когда в массив не добавляется никакого значения. Затем я изменил '' 'readString' '' на '' 'readStringUntil (' \ n ')' '' ', потому что, возможно, первый пакет будет потерян, но следующий, следующий за ним, всегда будет улавливаться, не нарушая их ( ловлю всю строчку). Но есть те же ошибки, поэтому я думаю, что мой небольшой опыт больше не может помочь в решении проблемы. Мне нужна ваша помощь.
Извините за плохой английский sh, и спасибо за любую помощь.