从计算机读取wav文件到arduino mega

时间:2014-07-01 20:45:16

标签: python serial-port arduino byte

我必须阅读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获得不同的字节。我已经尝试了很多东西,但最后我在这里因为我不知道如何解决它

1 个答案:

答案 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一样。