Problema con Arduino UNO e servo

Salve ragazzi,
mi chiamo Fulvio e mi sto avvicinando ad Arduino, questo è il mio primo giorno di scuola (primo post nel forum) dopo un anno che utilizzo questa meravigliosa piattaforma, mi sono cimentato in un progetto tutto mio partendo da zero.
Il progetto è molto semplice ma non capisco dove sbaglio.

In sintesi vorrei utilizzare il servo per azionare la leva di apertura della porta.

Il progetto è costituito da un pulsante e da un servo:

  • Qaundo il circuito è aperto il servo resta nella posizione di chiusura, cioè 160°
  • Quando il circuito si chiude il servo si posiziona nella posizione di apertura, cioè di 20°, aspetta 5 secondi e poi si riporta nella posizione di 20°
#include <Servo.h>
// crea un istanza della libreria servo
Servo myServo;

int switchState = 0;


void setup(){
  // collego il servo al pin 9
  myServo.attach(9);

  // collego il pulsante al pin 2
  pinMode(2, INPUT);

  // porto il servo in posizione di chiusura
  myServo.write(160);

}

void loop(){

  if (switchState == LOW) {
    myServo.write(160);
    
  }
  else { //porto il servo in posizione di apertura
    myServo.write(20);
 
    // aspetto 5 secondi e richiudo lail servo
    delay(5000);
    
    myServo.write(160);
  }
}

Grazie a tutti per la vostra disponibilità.

Chiedo scusa a tutti per la brutta figura.
Avevo mancato di scrivere la funzione digitalRead(2);

void loop(){

[color=red]switchState = digitalRead(2);[/color]

  if (switchState == LOW) {
    myServo.write(100);
    
  }
  else { //porto il servo in posizione di apertura
    myServo.write(20);
 
    // aspetto 5 secondi e richiudo lail servo
    delay(5000);
 
  }
}

Ciao,
prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI (spiegando quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... poi ... ricorda che ogni switch meccanico ha dei rimbalzi e, magari in questo caso sono ininfluenti, ma comunque è buona norma inserire un meccanismo di "debouncing".

Inoltre, l'istruzione delay() è bloccante, quindi ... se non devi fare altro può andare bene, ma nel caso il programma si complicasse e tu dovessi fare anche altre cose ... non la potresti più usare quindi ... sarebbe bene che imparassi ad usare la millis() ...
... prima guarda QUI, poi QUI ed infine leggi anche QUI e QUI ... :smiley:

Guglielmo

P.S. : Attento che hai copiato nel codice anche degli attributi di colore che non ci devono essere :wink: