Hallo,
ich würde gerne den Servo bei Signal auf 90° stellen, dann erneut abfragen ob immer noch ein Signal anliegt, wenn ja weiter auf 130°, wenn nein wieder auf 0.
Bei mir klappt diese "Stop" Funktion nicht....er macht das ganze Programm zu ende bis er auf 0° geht.
Könnt ihr mir helfen?
#include <Servo.h>
Servo servoblau;
int switchState = 0 ;
void setup() {
// put your setup code here, to run once:
pinMode(4, INPUT) ; //Eingang Signal
servoblau.attach(9) ; //Anschluss Servo
Serial.begin(9600) ;
}
void loop() {
switchState = digitalRead(4) ;
if (switchState == LOW) {
servoblau.write(90); //Position 1 ansteuern mit dem Winkel 90°
delay(500); //Das Programm stoppt für 1/2 sekunde
servoblau.write(0); //Position 1 ansteuern mit dem Winkel 0°
delay(1000); }
if (switchState == LOW) {
servoblau.write(130); //Position 1 ansteuern mit dem Winkel 130°
delay(500); //Das Programm stoppt für 1/2 sekunde
servoblau.write(0); //Position 1 ansteuern mit dem Winkel 0°
delay(1000);}
else
servoblau.write(0);
delay(1000);
}
du fragst deinen Pin nur einmal ab.
Zumindest vor der 2. If-Abfrage solltest du nochmal abfragen.
Toooooooooom:
den Servo bei Signal auf 90° stellen, dann erneut abfragen ob immer noch ein Signal anliegt, wenn ja weiter auf 130°, wenn nein wieder auf 0.
du machst im code was anderes.
Probierst mal so:
switchState = digitalRead(4) ;
if (switchState == LOW) { // den Servo bei Signal auf 90° stellen,
servoblau.write(90);
delay(500);
}
switchState = digitalRead(4) ; // dann erneut abfragen
if (switchState == LOW) { // ob immer noch ein Signal anliegt,
servoblau.write(130); // wenn ja weiter auf 130°,
delay(500);
} else { // wenn nein wieder auf 0.
servoblau.write(0);
delay(1000);
}
Ich habe jetzt einfach mal deine textuelle Beschreibung Punkt für Punkt in Code geschrieben.
Ich habe den Code mal „ordentlich“ formatiert und in Code-Tags eingeschlossen:
#include <Servo.h>
Servo servoblau;
int switchState = 0 ;
void setup()
{
// put your setup code here, to run once:
pinMode(4, INPUT) ; //Eingang Signal
servoblau.attach(9) ; //Anschluss Servo
Serial.begin(9600) ;
}
void loop()
{
switchState = digitalRead(4) ;
if (switchState == LOW)
{
servoblau.write(90); //Position 1 ansteuern mit dem Winkel 90°
delay(500); //Das Programm stoppt für 1/2 sekunde
servoblau.write(0); //Position 1 ansteuern mit dem Winkel 0°
delay(1000);
}
if (switchState == LOW)
{
servoblau.write(130); //Position 1 ansteuern mit dem Winkel 130°
delay(500); //Das Programm stoppt für 1/2 sekunde
servoblau.write(0); //Position 1 ansteuern mit dem Winkel 0°
delay(1000);
}
else
{
servoblau.write(0);
}
delay(1000);
}
Der Fehler ist, dass Du den Status des Schalters nur einmal abfragst und die Antwort in beiden if
s verwendest. Mein Tipp dazu:
Verzichte auf die Variable switchState und schreibe die Abfrage digitalRead(4)
direkt in die if-Klammern. Dann wird der Schalter beide Male abgefragt.
Gruß
Gregor
Super Vielen Dank euch !!!