ButtonOnFadingLed.ino
Aller à la navigation
Aller à la recherche
// Getting Started with Arduino // p. 61 // Example 05: Turn on LED when the button is pressed // and keep it on after it is released // including simple de-bouncing. // If the button is held, brightness changes. // Une DEL est allumée par un boutton et reste allumée // si le bouton est maintenu enfoncé, la DEL varie d'intensité // April 13, 2012 revised by // @atelierpdf.com #define LED 9 // la fiche de DEL (mode PWM) #define BUTTON 7 // la fiche du poussoir int val = 0; // contient l'état du bouton int old_val = 0; // contient la version précédente de la variable "val" int state = 0; // 0 = LED étiente while 1 = LED allumée int brightness = 128; // la valeur d'intensité de la DEL unsigned long startTime = 0; // depuis quand le bouton est-il pressé? void setup() { pinMode(LED, OUTPUT); // fiche de la DEL comme sortie pinMode(BUTTON, INPUT); // fiche du bouton comme entrée } void loop() { val = digitalRead(BUTTON); // lecture de l'état du bouton // tester s'il y a eu une transition entre en et hors (0/1) if ((val == HIGH) && (old_val == LOW)) { state = 1 - state; // inverser la valeur d'état startTime = millis(); // millis() retourne la valeur de l'horloge de l'arduino // combien de millème de secondes // ont-elles passé depuis que le cuircuit a // été réinitialisé? // (on se souvient de quand le bouton a été // sollicité la dernière fois) delay(10); } // tester si le bouton est maintenu enclencché if ((val == HIGH) && (old_val == HIGH)) { // si le bouton est maintenu enfoncé pendant plus de 500 milisecondes if (state == 1 && (millis() - startTime) > 500) { brightness++; // auguementer la luminosité de la LED de 1 delay(10); // un délai d'attente pour éviter une // montée en puissance trop rapide if (brightness > 255) { // a-t-on atteint le maximum d'intensité? brightness = 0; // si l'on a dépassé 255 // on retombe à 0 } } } old_val = val; // la variable "val" est vieille, mettons-la en mémoire // si le bouton est enclenché if (state == 1) { analogWrite(LED, brightness); // allumons la DEL // à la valeur actuelle d'intensité } else { analogWrite(LED, 0); } }