我的arduino不断发送字符串。
例如,我逐行发送一个整数(0-1023),所以它应该是:
"51\r\n233\r\n37\r\n166\r\n"
无限长,因为它不断流式传输。
我目前正在使用pyserial
的函数readline()
来读取数据,但不断看到已损坏/丢失的字节。例如,代替"37\r\n"
后跟"11\r\n"
,它将获得"3\r11\r\n"
甚至"3711\r\n"
!
这是我完整的Python端代码:
import serial
import time
if __name__ == '__main__':
ser = serial.Serial('COM3', baudrate=1000000)
data = []
time0 = time.time()
while (time.time() - time0 < 5): # Read data for 5 seconds
data.append(ser.readline())
ser.close()
对于那些感兴趣的人,(可能相关的)arduino代码就是:
#define FASTADC 1 // Flag for prescale 16
// Code pasted for modifying ADCSRA
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void setup() {
Serial.begin(1000000);
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
}
void loop() {
int val;
val = analogRead(A0);
Serial.println(val);
}
从代码中可以看出,波特率,奇偶校验,停止位均设置为1,000,000;没有; 1。