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: