В моем проекте 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")