Ошибка последовательной связи с Arduino при использовании Threading.Timer - PullRequest
0 голосов
/ 26 апреля 2020

В моем проекте python я использую последовательную связь для отправки команд и получения ответов от Arduino. У меня есть несколько задач, которые должны выполняться циклически, но в разные сроки. Для этого я использую threading.Timer. Затем время от времени я посылаю команду в Arduino, которая возвращает значение (взятое с датчика).

Все отлично работает. Однако иногда, когда я нажимаю другую кнопку, которая отправляет информацию (значительно длинную) в Arduino, Thread просто перестает вызываться, когда это необходимо, как если бы команда была прервана в середине процесса, что вызывает ошибку в последовательная связь потока.

На консоли не отображается информация об ошибке.

Есть ли способ заставить threading.Timer ожидать, пока последняя команда завершится sh, так что он выполняется?

Циклическая функция:

def action_5_seconds(self):
    global state_banho
    if state_banho == False:
        self.apresenta_parametros()
    else:
        self.verify_pid_banho()
    self.verify_pid_lamp()

    #self.agente_ar_automatic()
    print("Threand 5s OK...")

    clock_5_sec = threading.Timer(5, self.action_5_seconds)
    clock_5_sec.start()

Функция, которая отправляет в arduino:

def power_off_ar(self):
    serial_port.flush()
    serial_port.write(b's,2,99,3450,1650,450,450,450,1250,450,400,450,450,400,450,450,400,450,400,450,450,400,450,450,400,450,400,450,400,450,450,400,1300,450,400,450,450,400,450,450,400,450,400,450,400,450,450,400,450,450,400,450,1300,400,450,450,400,450,400,450,400,450,450,400,450,450,400,450,400,450,450,400,450,450,1250,450,400,450,1300,450,1250,450,450,400,450,450,400,450,400,450,1300,400,450,450,1250,450,1300,450,400,450,1250,450')
    #time.sleep(0.5)
    print("Comando Enviado para o AR")
...