Надежная последовательная связь Arduino-Python

Я работаю над проектом, в котором python отправляет команды двигателя на Arduino Mega через USB. Я играл с несколькими вариантами того, как сделать код надежным, чтобы программа Python ждала, пока Arduino не будет готов к приему. Это супер базовая версия вопроса.

Что не так, так это то, что arduino println успешно отправляет значение обратно для чтения в последовательном мониторе в arduino IDE. Но python не читает его успешно, чтобы напечатать значение в командной строке.

Что не так с моим кодом чтения python?

Ардуино

//++++++++++++++++++++Initializations+++++++++++++++++++++
int command = 0;
int control = 0;
boolean newInput = 0;
int myCount = 0;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void setup() {
  Serial.begin(9600);                    // set the baud rate
  Serial.println(1);                     // initial "ready" signal
}

void loop() {
   // read sent command and return it
    if(Serial.available() > 0){         // only send data back if data has been sent
      command = Serial.read();
      delay(10);

      Serial.println(1);                // send "ready" signal
      delay (50);                       //alternatively Serial.flush();
      myCount++;

    } 

}

Вот сжатая версия моей программы, которая освещает проблему.

Питон

import serial
ser = serial.Serial('/dev/ttyACM0', 9600, timeout = 1)
import time

controlBit = True
n = 0
charsWait = 0   #chars waiting from arduino

print "Starting up"
connected = False

while True:
    n = n+1
    print n
    print "Writing"
    ser.write(str(2))
    time.sleep(1)
    while True:
        try:
            print "reading"
            charsWait = ser.readline()
            time.sleep(1)
            print "   = value recieved", charsWait 
            break
        except:
            pass
    print "restart"
    ser.flush() #flush the buffer

person rocketboss    schedule 25.05.2016    source источник


Ответы (1)


<pre>Arduino code:
    //++++++++++++++++++++Initializations+++++++++++++++++++++
    int command = 0;
    int control = 0;
    boolean newInput = 0;
    int myCount = 0;
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    void setup() {
      Serial.begin(9600);                    # set the baud rate
      Serial.println("1");                    # initial "ready" signal
    }
    
    void loop() 
    {
       # read sent command and return it
        if(Serial.available() > 0)
        {
          command = Serial.read();
          Serial.println(command);                
        } 
    }
    
    
#Python Code for is waiting for Arduino listening state.

    import serial
    ser = serial.Serial('/dev/ttyACM0', 9600, timeout = 1)
    
    import time
    
    controlBit = True
    n = 0
    charsWait = 0   #chars waiting from Arduino
    
    print "Starting up"
    connected = False
    
    while True:
        charsWait = ser.read()   #ser.read data in ASCII
        print "   = value recieved", charsWait 
        if charsWait == 49:      #ASCII of 1=49**strong text**
             while True:
                 ser.write("As per you")       

# означает, что когда запускается установка Arduino (время инициализации Arduino) в момент, когда Arduino отправляет 1, питон ожидает получения 1 после того, как 1 они могут работать.

person Raj Mehta    schedule 24.02.2021