问题1: 我正在尝试使用pySerial读取来自我的arduino的串行数据。 有时代码似乎运行良好,但有时它打印奇怪 的东西。 arduino监视器总是打印正常数据,这很奇怪 行为恰好发生在python代码上。
另一件事:这恰好发生了 当我将波特率从9600增加到115200时,我真的需要这个 更高的波特率。
Opening COM port...
Port successfully opened
b'7\r\n'
b'133\r\n'
b'125\r\n'
b'114\r\n'
b'104\r\n'
(...) (and suddenly here comes again)
b'\xbaj\xea2\x93j\n'
b'\xa6\x13j\n'
b'&\x13j\n'
b'&\x93j\n'
b'\xa6\xd3j\n'
(...)
[Finished in 2.0s]
有时我需要取消构建,因为它会卡住 在for循环中。
问题2: 除此之外,在读取数据后我需要将其转换为int。 刚试过“int(数据)”,但很明显它没有用。当然是因为问题1.
当我改变这个时:
print(data)
对此:
print(int(data))
我明白了:
ValueError: invalid literal for int() with base 10: b'\xa1j\n'
import serial
print("Opening COM port...")
# open and prepare serial port
ser = serial.Serial('COM3', 115200, timeout=8,
parity=serial.PARITY_EVEN, rtscts=1)
print("Port successfully opened")
for i in range(50):
data = ser.readline()
print(data) # print(int(data))
ser.close()
void setup() {
Serial.begin(115200); // set baudrate
}
void loop() {
int data = 0;
int analogPin = 1;
data = analogRead(analogPin); // read pin
Serial.println(data, DEC); // print data to the serial port
}
答案 0 :(得分:0)
数据有效性受到较高数据传输速度的影响,因为硬件无法读取以正确顺序发送的数据。尝试将波特率降低到57600。