Я читаю данные о последовательных данных в vPython от Arduino и получаю ошибки данных во время readline. Иногда он читает две строки подряд, и на этот раз он пропустил запятую, как я пытался показать на фотографии. Код ниже.Python неверно читает серийные данные
В чем причина этого?
[IMG] http://i.imgur.com/cAw7De1.png
код Python:
arduinoSerialData=serial.Serial('/dev/cu.usbmodem1421',115200)
while (1==1): #loops forever
rate (30) # tells vPython to run this loop (times/sec)
while(arduinoSerialData.inWaiting()==0):
pass #do nothing
sensorCallInfo = arduinoSerialData.readline()
print sensorCallInfo
dataNums = sensorCallInfo.split(',')
x1 = float(dataNums[0])
y1 = float(dataNums[1])
z1 = float(dataNums[2])
sysCal = int(dataNums[3])
gyroCal = int(dataNums[4])
accelCal = int(dataNums[5])
magCal = int(dataNums[6])
print x1, y1, z1, sysCal, gyroCal, accelCal, magCal
print
print
Arduino Код:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
#define BNO055_SAMPLERATE_DELAY_MS (50)
imu::Vector<3> linearAccel;
uint8_t systemcal, gyrocal, accelcal, magcal = 0;
Adafruit_BNO055 bno = Adafruit_BNO055(55);
void setup(void)
{
Serial.begin(115200);
while (!Serial);
if (!bno.begin()) //checks for sensor to start
{
Serial.print("No sensor detected. Check wiring or I2C address.");
while (1);
}
bno.setExtCrystalUse(true);
}
void loop(void)
{
bno.getCalibration(&systemcal, &gyrocal, &accelcal, &magcal);
linearAccel = bno.getVector(Adafruit_BNO055::VECTOR_LINEARACCEL);
outputForPython();
delay(BNO055_SAMPLERATE_DELAY_MS);
}
void outputForPython()
{
Serial.print(linearAccel.x()); Serial.print(",");
Serial.print(linearAccel.y()); Serial.print(",");
Serial.print(linearAccel.z()); Serial.print(",");
Serial.print(systemcal, DEC); Serial.print(",");
Serial.print(gyrocal, DEC); Serial.print(",");
Serial.print(accelcal, DEC); Serial.print(",");
Serial.print(magcal, DEC); Serial.println("");
}
Это происходит, если вы настроили свой последовательный порт на скорости 9600 бод? – pyInTheSky
Скорее всего, происходит переключение последовательного порта, поэтому вы получаете неправильное чтение на одном из краев ... https://www.sparkfun.com/tutorials/215 – pyInTheSky
Это происходит при 9600 бодах как Что ж. Я посмотрю учебник, спасибо за ссылку. Я также попробую новый кабель и посмотрю, проблема в этом. Я думаю, что вы правы в отношении шума, потому что иногда последнее чтение перед ошибкой имеет две строки в виде одной строки, что означает, что ошибка чтения несколько отличается каждый раз. –