Тайм-аут Pyserial при увеличении скорости передачи в Arduino Uno - PullRequest
0 голосов
/ 23 мая 2019

В настоящее время я пытаюсь настроить анализатор спектра с некоторыми схемами, которые я подключил к 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)

и код C ++ на Arduino для получения / подтверждения сообщения:

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,время чтения всегда истекает.Я также попытался изменить его, чтобы просто прочитать (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 ++ хорош, так как непосредственное использование последовательного монитора дает желаемые результаты, но я не знаю, как предотвратить возникновение этой ошибки.Я также пытался очистить ввод в начале каждой программы.

...