Liebe Arduinogemeinde,
ich habe voller Elan damit begonnen, die LED meines Arduinos über Python zu steuern. Das Ziel ist es, mittels Python einen Wert über den seriellen Port an das Arduino zu senden. Der Wert hat das Format ABB, A steht für LED an (=1) oder aus (=0) und BB für die Zeit in Zehntelssekunden. Hat das Arduino mit diesem Wert die LED zum leuchten oder eben nicht-leuchten gebracht, gibt es ein "r" an den seriellen Port zurück, um dem Pythonscript mitzuteilen, dass es "ready" für den nächsten Befehl ist. Wahrscheinlich verpasst das Python-Script ab und zu dieses r (aus einem mir unbekannten Grund, denn manchmal geht auch alles gut) und die ganze Geschichte bleibt dann hängen.
Was mach ich falsch, oder wie krieg ich das hin?
Arduino-Script:
int led = 13;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
String empfangenerString = empfangen();
String anab;
String dauer;
char eingabe[4];
empfangenerString.toCharArray(eingabe,4);
for (int i=0;i<1;i++) {
anab += char(eingabe[i]);
}
for (int i=1;i<3;i++) {
dauer += char(eingabe[i]);
}
unsigned long dauerform = dauer.toInt() * 100;
if (anab.equals("0")) {
digitalWrite(led, LOW);
delay(dauerform);
Serial.println("r");
}
if (anab.equals("1")) {
digitalWrite(led, HIGH);
delay(dauerform);
Serial.println("r");
}
else {
}
}
String empfangen() {
if(Serial.available()) {
String inString;
while(Serial.available()) {
inString += char(Serial.read());
delay(10);
}
return inString;
}
return "";
}
und das Testscript in Python:
import serial as s
import time as t
def sandw(output):
ready = 0
port = s.Serial('/dev/tty.usbmodem621', 9600, timeout=0)
port.write(output)
while ready != "r":
ready = port.readline(1)
return
for i in range(5):
sandw("010")
sandw("102")
sandw("010")
sandw("103")
sandw("010")
sandw("101")
Wäre super dankbar für jede Hilfe!