Использование Python и Arduino для изменения задержки лампочки через Serial - PullRequest
0 голосов
/ 03 января 2019

Я использую Arduino Mega и python 3.7 в Windows 10 64-bit. Я пытаюсь заставить лампочку мигать, используя python и pyserial. Я хочу, чтобы лампочка оставалась включенной в течение некоторого времени, а затем выключалась. Я ввожу значения в программе Python Tkinter: https://pastebin.com/zkRmcP60 полный код. после ввода значений, которые я отправляю в Arduino через этот код:

import msgpack
import serial
arduionoData = serial.Serial('com3', 9600, timeout=1)
def sendlower(*args):

    try:
            global arduionoData
            arduionoData.write(b"1")
            while arduionoData.readline().decode() != "Send Next":
                pass
            first = int(firstdelay.get())
            arduionoData.write(msgpack.packb(first, use_bin_type=True))
    except ValueError:

        print("Only Positive Integers")

def senduppper(*args):
    try:

        global arduionoData
        arduionoData.write(b"2")
        while arduionoData.readline().decode() != "Send Next":
            pass
        second = int(seconddelay.get())
        arduionoData.write(msgpack.packb(second, use_bin_type=True))

    except ValueError:

        print("Only Positive Integers")

Программа Tkinter выполняет вышеуказанные функции, чтобы посетить Pastebin для всего кода.

Сначала я указываю режим, будь то задержка включения или изменение задержки выключения. С этим кодом (программа установки и другой код опущены, пожалуйста, посмотрите в корзину для вставки.)

void readdelay(){
  mode = Serial.parseInt();
  if (mode == 1){
      delay(200);
      Serial.write("Send Next");
      delay1 = Serial.parseInt();
  }else if (mode == 2){
      delay(200);
      Serial.write("Send Next");
      delay2 = Serial.parseInt();  
  }
}
void loop() {
  if (Serial.available() > 0){
     readdelay();
  }
}

Прямо сейчас, если я отправлю любое положительное число в программу, оно либо выключит (когда я посылаю номер для задержки включения) индикатор полностью, либо включит его (когда я отправлю число для задержки выключения) , Я предполагаю, что всякий раз, когда Serial.parseInt(); функция получает неправильный тип ввода, она интерпретирует его как ноль.

1 Ответ

0 голосов
/ 03 января 2019

Документация гласит:

Если действительные цифры не были прочитаны при истечении времени ожидания (см. Serial.setTimeout ())>, возвращается 0;

Кажется, что parseInt не работает, поэтому задержка установлена ​​на 0, поэтому индикатор полностью включается или выключается.

Другая возможность состоит в том, что arduino получает только первый символ, что означает, что свет переключается так быстро, что вы его не видите.(Описанная проблема здесь )

Попробуйте распечатать, какое значение получает Arduino.Он должен рассказать вам, что происходит и в каком направлении его решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...