Wenn ich das Arduino-Konzept richtig verstanden habe (ich benutze keinen Arduino), ist das anders gedachr. Die Funktion loop() sollte alles tun, was zu einem Zeitpunkt zu tun ist, und sich dann beenden. Dann kann das Framework seine Arbeit erledigen und ruft danach loop() wieder auf. Blockierende Schleifen sollte man in der loop-Funktion also unterlassen. Ich skitziere hier mal einen möglichen Ablauf in Pseudocode
Das xx beim delay bestimmt, wie schnell das System reagiert. Da ein Servo so rund alle 20ms einen neuen Sollwert entgegen nehmen kann, kann man nicht schneller als diese 20ms werden. Ich kenne die Funktion servo.write(0) nicht. Wenn sie für die 20ms eines Servosignal blockiert, braucht man möglicherweise das delay() garnicht. Blockiert sie nicht sondern erzeugt das Servosignal im Hintergrund, darf man sie nicht zu schnell hintereinder aufrufen, da sonst das neue Signal das alte störtt. Wie es wirklich ist, verrät sicher die Doku.Code:loop(){ if Taste-hoch { pos++ } else if Taste-runter { pos-- } else if Taste-stop { pos = 0 } if pos > MAX { pos = MAX else if pos < MIN { pos = MIN } SetServo(pos) delay(xx) }
MfG Klebwax
Lesezeichen