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);
}
}