Sketch
/* * Ingressi digitali */ int ledPin = 12; // Pin a cui connettere il led int switchPin = 2; // Pin a cui connettere il pulsante int val; // variabile per leggere lo stato del pulsante void setup() { pinMode(ledPin, OUTPUT); // Imposta il pin del LED come uscita pinMode(switchPin, INPUT); // Imposta il pin del pulsante come ingresso } void loop(){ val = digitalRead(switchPin); // legge l'input e lo inserisce in una variabile if (val == LOW) { // se il pulsante è premuto digitalWrite(ledPin, HIGH); // accende il LED } if (val == HIGH) { // se il pulsante è premuto digitalWrite(ledPin, LOW); // spegne il LED } }
Schema
Schema generato con fritzing |
Lo sketch appena descritto presenta un problema. I pulsanti per come sono costruiti presentano il cosidetto effetto rimbalzo , ovvero non appena premuti, nei primi millisecondi, generano del rumore che potrebbe falsare la lettura.
Per ovviare a questo problema possiamo leggere i valori in input a distanza di qualche millisecondo e verificare se sono uguali tagliando in questo modo il rumore dell'effetto rimbalzo;
void loop(){
val = digitalRead(switchPin); // legge il valore delay(10); // aspetta 10 millisecondi val2 = digitalRead(switchPin); // rilegge il valore if (val == val2) { // se i due valori sono uguali
if (val == LOW) { // se il pulsante è premuto digitalWrite(ledPin, HIGH); // accende il LED } if (val == HIGH) { // se il pulsante è premuto digitalWrite(ledPin, LOW); // spegne il LED }
}
Riferimenti:
http://www.ikalogic.com/debouncing.php
http://arduino.cc/it/Tutorial/Debounce
Nessun commento:
Posta un commento