我必须读取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 获取不同的字节。我尝试了很多方法,但最后我还是来这里,因为我不知道如何解决它
最佳答案
串行端口通信提供了随每个字节一起传输奇偶校验位的选项。这可用于检测传输错误。
在 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 所做的那样。
关于python - 从电脑读取wav文件到arduino mega,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518978/