Servo Ansteuerung

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 ifs 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 !!!