Ein Problem über welches mich viele Anfragen erreicht haben: der Servo bewegt sich immer gleich schnell. Meisten ZU schnell. Ich habe einen Sketch gebastelt der Zeigt wie man einen Servo auch langsam bewegen kann.
Der Nachteilan diesem Sketch: es bewegt sich immer nur ein Servo gleichzeitig.
Zunächst die Servo Libary aufrufen.
Wir legen wir eine Variable mit dem Namen "Tor1" an. Damit speichern wir die aktuelle Position des Servos Tor1.
Außerdem müssen wir einem Servo noch einen Namen geben.
Im Setup brauchen hier eigentlich nichts machen.
Dann Programieren wir eine Funktion außerhalb unseres Loop. Dadurch können wir wiederkehrende Abläufe einmal programmieren und aus dem Loop aufrufen und mit ein paar Parametern versorgen. Da wir einen Wert vom Typ int zurück erwarten, ist diese Funktion auch vom Typ int.
Übergeben werden folgende Werte:
an welchem Pin ist dieser angeschlossen, auf welche Grad-Zahl soll gefahren werden, auf welcher Grad-Zahl steht der Servo aktuell, wie lange soll zwischen den einzelenen Schritten gewartet werden.
In dieser Funktion aktivieren wir den PIN.
Dann müssen wir wissen in welche Richtung sich der Servo drehen muss. Daher Prüfen wir ob "soll" größer oder kleiner ist als "ist".
Beidesmal starten wir eine for-Schleife. Als Bedingungsvariable benutzten wir den "ist"-Wert. Diesen ändern wir solange schrittweise bis er dem soll entspricht.
Dann schicken wir dem Servo das Signal auf diesen "ist"-Wert zu fahren.
Anschließend warten wir kurz. Die dauer haben wir ja mit in die Funktion übergeben.
Nach den beiden for-Schleifen deaktivieren wir unseren Pin wieder. Außerdem senden wir den Wert "soll" aus der Funktion zurück.
Im loop brauchen wir dann nur die Funktion aufrufen und die Werte in der richtigen Reihenfolge mit übergeben. Der Wert der zurück kommt schreiben wir auf die Variable Tor1. Dies können wir dann wieder als "ist"-Wert in den nächsten Funktionsaufruf schicken
#include <Servo.h>
int Tor1 = 0;
Servo Serv;
void setup() {
}
int schalten (int PIN, int soll, int ist,
int Pause){
Serv.attach(PIN);
if (soll > ist){
for (ist; ist<=soll; ist++){
Serv.write(ist);
delay(Pause);
}
}
if (soll < ist){
for (ist; ist>=soll; ist--){
Serv.write(ist);
delay(Pause);
}
}
Serv.detach();
return soll;
}
void loop() {
Tor1 = schalten(5, 20, Tor1, 50);
delay(500);
Tor1 = schalten(5, 0, Tor1, 200);
delay(500);
}
Wollen wir nun Unterschiedliche Servos im Sketch ansteuern, müssen wir nur eine passende Variable oben anlegen und im loop die entsprechenden Stellen ersetzten.
Diese Webseite wurde mit Jimdo erstellt! Jetzt kostenlos registrieren auf https://de.jimdo.com