Menu
CoddyTech

Servo-Winkel über die serielle Schnittstelle

Teil des Abschnitts Ausgaben der Arduino-Journey von Coddy. Lektion 23 von 24.

Der Arm kann auch Befehle über den seriellen Monitor entgegennehmen. Gib einen Winkel ein und drücke Enter; Serial.parseInt() liest die Zahl:

if (Serial.available() > 0) {
  int angle = Serial.parseInt();
  Serial.read();  // der Zeilenumbruch nach der Zahl
  // angle verwenden
}

Der Zeilenumbruch nach der Zahl bleibt zurück. Beim nächsten Durchlauf von loop() würde parseInt() keine Ziffern finden, eine Sekunde warten und 0 zurückgeben. Bei einer Blinkgeschwindigkeit funktionierte es, diese 0 zu ignorieren, aber 0 ist ein echter Winkel. Lies also den Zeilenumbruch direkt nach der Zahl mit einem Serial.read() aus.

Jemand könnte auch eine Zahl eingeben, die kein Winkel ist. arm.write() interpretiert jede Zahl ab 544 als Impulslänge in Mikrosekunden, sodass 1000 den Arm auf ungefähr 45 Grad stellen würde. constrain() hält den Winkel zunächst zwischen 0 und 180:

angle = constrain(angle, 0, 180);  // Übergib ihm die Variable, nicht parseInt()
challenge icon

Aufgabe

Mittel

Bewege den Servo auf den im Serial Monitor eingegebenen Winkel:

  • wenn eine Zahl ankommt, lies sie mit Serial.parseInt(), dann lies den Zeilenumbruch aus (0 ist auch ein Winkel)
  • halte sie mit constrain() zwischen 0 und 180
  • bewege den Arm und gib den Winkel als Angle: 45 aus

Drücke Run, sende 45 über den Serial Monitor und drücke dann Check.

Probier es selbst

#include <Servo.h>

Servo arm;

void setup() {
  arm.attach(9);
  arm.write(90);
  Serial.begin(9600);
}

void loop() {
  // Wenn eine Zahl ankommt: Lies sie ein und lies den Zeilenumbruch weg,
  // halte sie zwischen 0 und 180, bewege den Arm und gib sie aus
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Ausgaben

Übe selbstständig: Arduino-Playground