Indice
Descrizione
Nella terza puntata del tutorial di Arduino impareremo come trasformare il pulsante in un interruttore, partendo dal circuito della precedente lezione. Inoltre vedremo come evitare il fenomeno dei "rimbalzi" grazie alla tecnica del debouncing, per cui modificheremo lo sketch in modo da poter gestire le oscillazioni del pulsante modificando soltanto una variabile.
Con lo sketch scopriremo la differenza tra le variabili globali e locali e impareremo a utilizzare l'operatore logico AND nelle condizioni del costrutto IF.
Infine introdurremo un nuovo tipo di variabile, ovvero unsigned long, che ci permetterà di salvare il tempo trascorso espresso in millisecondi.
int ledPin = 9;
int pulsantePin = 2;
int ledStato = LOW;
int pulsanteStato = LOW;
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(pulsantePin, INPUT);
digitalWrite(ledPin, ledStato);
}
void loop(){
int lettura = digitalRead(pulsantePin);
if(lettura != pulsanteStato and lettura == HIGH){
ledStato = !ledStato;
digitalWrite(ledPin, ledStato);
}
pulsanteStato = lettura;
delay(10);
}
int ledPin = 9;
int pulsantePin = 2;
int ledStato = LOW;
int pulsanteStato = LOW;
int attesaDebounce = 50;
unsigned long ultimoTempoDebounce = 0;
int ultimaLettura = LOW;
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(pulsantePin, INPUT);
digitalWrite(ledPin, ledStato);
}
void loop(){
int lettura = digitalRead(pulsantePin);
if(lettura != ultimaLettura){
ultimoTempoDebounce = millis();
}
if((millis() - ultimoTempoDebounce) > attesaDebounce){
if(lettura != pulsanteStato and lettura == HIGH){
ledStato = !ledStato;
digitalWrite(ledPin, ledStato);
}
pulsanteStato = lettura;
}
ultimaLettura = lettura;
delay(10);
}