我必须阅读wav文件(我决定使用python)并将文件从文件写入串口。这是我的python代码(修改字节发送/接收稍作修改)
import serial, time
ser = serial.Serial(6, 19200, timeout=0,parity=serial.PARITY_EVEN, rtscts=1)
f = open("out.wav", "rb")
try:
n=0
while n!=7000:
f.read(1)
n+=1
while n != 7002:
byte = f.read(1)
ser.write(byte)
n+=1
finally:
print(byte)
time.sleep(1)
print(ser.read())
f.close()
ser.close()
这是我的arduino代码,以确定我正在接收的内容
byte buf;
void setup(){
Serial.begin(19200);
}
void loop(){
if(Serial.available()>0){
buf=Serial.read();
Serial.flush();
Serial.println(buf);
}
}
我的主要问题是我从python和arduino获得不同的字节。我已经尝试了很多东西,但最后我在这里因为我不知道如何解决它
答案 0 :(得分:1)
串行端口通信提供了传输奇偶校验位和每个字节的选项。这可用于检测传输错误。
在Arduino上,你使用Serial.begin(19200)。这配置为隐式使用无奇偶校验位。
在运行Python的机器上,使用serial.Serial(6,19200,timeout = 0,parity = serial.PARITY_EVEN,rtscts = 1)。这明确地设置偶校验位。
因此,Python为每个字节发送偶校验位,而arduino希望根本不接收奇偶校验位。这可能是您观察到接收到的字节数超出预期的原因。
在运行Python的机器上试试这个:
serial.Serial(6, 19200, timeout=0)
这应该隐式配置为不使用奇偶校验位,就像使用Arduino一样。