Usare un pulsante per controllare un Led

 

Ora provate il codice sottostante. Noterete che funziona… in un certo senso. Scoprirete che la luce cambia così rapidamente che non si può impostarla correttamente premendo il pulsante. Diamo un’occhiata alle parti più interessanti del codice: Stato è una variabile che conserva 0 e 1 per ricordare se il Led è acceso o spento.

Dopo che si rilascia il pulsante, la inizializziamo su 0 ( Led spento ). Poi, leggiamo lo stato corrente del pulsante e, se è premuto ( Valore == HIGH ), cambiamo lo stato da 0 a 1 o viceversa. E lo facciamo usando un trucchetto, dato che lo stato può essre solo 1 o 0. Il trucco che uso chiama in causa una piccola espressione matematica basata sull’idea che 1 – 0 fa 1 e 1 – 1 fa 0:

Stato = 1 – Stato;

La riga può non avere molto senso in matematica, ma ne ha in programmazione. Il simbolo = sta per ” Assegna il risultato di ciò che viene dopo di me al nome di variabile che mi precede ” e in questo caso al nuovo valore di stato viene assegnato il valore di 1 meno il vecchio valore di stato.

Più avanti nel programma, potete vedere che usiamo lo stato per scoprire se il Led deve essere acceso o spento. Come ho detto, questo produce un risultato un po’ strano.

Il risultato è discontinuo per via del modo in cui leggiamo il pulsante. Arduino è molto veloce; esegue le sue istruzioni interne a una velocità pari a 16 milioni di istruzioni al secondo, cioè potrebbe eseguire tranquillamente alcuni milioni di righe di codice al secondo. Questo significa che, mentre il nostro dito preme il pulsante, Arduino probabilmente sta leggendo la posizione del pulsante alcune centinaia di volte e ne modifica di conseguenza lo stato. Per questo, i risultati finiscono per essere imprevedibili; il Led potrebbe apparire spento quando lo vogliamo acceso o viceversa. Dato che perfino un orologio rotto dice la verità due volte al giorno, il programma qualche volta potrebbe mostrare il comportamento corretto, ma nella maggior parte dei casi no.

Nel prossimo tutorial impareremo come fare.

Codice ( Sketch ) per l’accesione del Led

 

Esempio: Accende il Led quando il pulsante è premuto e lo mantiene acceso dopo che lo si rilascia

{codecitation class=”brush:cpp”}

#define Led  13  // Il Pin del Led 
#define Pulsante 7 // il Pin di Input dove è collegato il pulsante
int Valore = 0;     // Valore servirà per conservare lo stato del Pin di Input
int Stato = 0;   // 0 = Led spento mentre 1 = Led acceso 

void setup()
{
pinMode(Led, OUTPUT); // Indica ad Arduino che Led è un Ouput
pinMode(Pulsante, INPUT); // E che Pulsante è un Input
}

void loop()
{
Valore = digitalRead(Pulsante); // Legge il valore dell’Inpute e lo conserva

if (Valore == HIGH) // Verifica che l’Input sia HIGH ( Pulsante Premuto ) e ne cambia lo stato
{
Stato = 1 – Stato;
}

if (Stato == 1)
{
digitalWrite(Led, HIGH); // Accende il Led
}
else
{
digitalWrite(Led, LOW);
}
}

{/codecitation}

Share This