Я работаю над проектом, в котором 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