LedOn withButton03.ino

De Wikilipo.
// Example 03C: Turn on LED when the button is pressed
// and keep it on after it is released
// after Getting started with Arduino by M. Banzi
// pp. 51 et 52
// version 3, définitve, résolvant le "bouncing"
// due à l'imperfection des contacts du bouton
// par une pause de 10 à 50 millisecondes (debouncing)
// debugging April 11, 2012
// French comments April, 13, 2012
// @atelierpdf/infolipo March 20, 2012

const int LED = 13;   // la fiche pour la LED
const int BUTTON = 7; // la fiche d'entrée
                      // à laquelle le bouton est relié
                      
int val = 0;   // val va contenir l'état
               // de la fiche d'entré
             
int old_val = 0; // cette variable va contenir
                 // la valeur précédente de "val"
                 
int state = 0;   // 0 = LED éteinte, 1 = LED allumée

void setup() {
  // Serial.begin(9600);     // ouverture de la ligne série
  pinMode(LED, OUTPUT);   // variable LED est une sortie
  pinMode(BUTTON, INPUT); // la variable BUTTON est une entrée
}

void loop(){
  val = digitalRead(BUTTON); // la dernière valeur en entrée
                             // est conservée dans val
                             
 // Serial.println(val);   // affiche dans moniteur du port série l'état de l'interrupteur
                             
  // on teste si il y a eu une transition
  // si oui, on change la valeur de "val"
  if ((val == HIGH) && (old_val == LOW)){
    state = 1 - state;
    
    // on ajoute un temps de 10 milisecondes pour
    // tenir compte du bouncing
    delay(50);
  }
  old_val = val; // val est à présent ancienne, conservons la
  
  // si la LED est allumée
  if (state == 1) {
    digitalWrite(LED, HIGH); // allume-la
  } 
  else {
    digitalWrite(LED, LOW);  //  sinon, éteins-la
  }
}