mercoledì 25 gennaio 2012

led e pulsante (Digital Input...continua)

Ora che conosciamo le resistenze di pullup possiamo implementare il nostro circuito che ci permetterà di accendere un LED utilizzando un pulsante.


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