当Arduino Uno中的波特率增加时,Pyserial超时

时间:2019-05-22 21:58:22

标签: python c++ arduino pyserial platformio

我目前正在尝试使用一些我已经连接到arduino uno的电路来设置频谱分析仪,并且我正在尝试通过在python脚本和arduino之间发送确认/确认消息来使接口更健壮。

为了尝试最大化处理速度,我在arduino和脚本中都增加了波特率。

python中的发送消息功能:

def send_command(message, board):
    message_dict = {"Setup": '0',
                    "FFT": '1',
                    "Audio":'2'}

    if message not in message_dict.keys():
        raise ValueError("Message not configured on Arduino")

    # send message
    board.write(message_dict[message].encode())
    log.debug("[+] Message Sent: {} ({})".format(message_dict[message], message))
    time.sleep(0.2)
    #check confirmation:
    line = str(board.read(12), "utf-8")
    log.debug("[+] Confirmation recieved: {}".format(line))
    if message_dict[message] not in line:
        raise RuntimeError("Unable to acknowledge message:{}".format(line))
    return

board = serial.Serial("/dev/ttyACM0", 115200, timeout=10)
send_command("Audio", board)

和arduino上的C ++代码以接收/确认消息:

void Analyser::read_terminal()
{
    int cmd;
    if(!Serial.available()) return;

    cmd = Serial.read() - '0';
    if(cmd <4)
    {
        mode = static_cast<state>(cmd);
        Serial.print("Recieved: ");
        Serial.println(static_cast<int>(mode));
    }
    else
    {
        Serial.println("Command not recognised");
    };
};

mode是一个枚举器类。在我的platformio串行查看器中,所有消息都通过正常处理,即使我将波特率提高到115200,它也可以按我希望的方式发送给我发送的其他数字。当波特率是9600但当波特率提高到115200时,该脚本也可以工作readline总是超时。我也尝试将其更改为read(12),但再次超时。

改变睡眠时间似乎也没有影响。我从python脚本获得的错误消息是:

DEBUG:root:[+] Message Sent: 2 (Audio)
DEBUG:root:[+] Confirmation recieved: 
Traceback (most recent call last):
  File "....Data Logger/Audio Lock/console_reader.py", line 54, in <module>
    send_command("Audio", board)
  File ".../Data Logger/Audio Lock/console_reader.py", line 24, in send_command
    raise RuntimeError("Unable to acknowledge message:{}".format(line))
RuntimeError: Unable to acknowledge message:

表明什么也没收到。显然,c ++代码很好,因为直接使用串行监视器可以提供所需的结果,但是我不知道如何停止发生此错误。我还尝试在每个程序开始时刷新输入。

0 个答案:

没有答案