Introduction Ce projet consiste à réaliser un bargraphe à LED commandé par une carte Arduino et deux boutons poussoirs. L’objectif est de contrôler l’allumage progressif des LED du bargraphe à l’aide de boutons, l’un permettant d’ajouter une LED allumée et l’autre d’en retirer une. Le système est composé d’une carte Arduino, d’un bargraphe à LED (ou plusieurs LED individuelles), de résistances pour protéger les LED, et de deux boutons poussoirs. Chaque bouton est connecté à une entrée numérique de la carte Arduino, tandis que les LED du bargraphe sont reliées aux sorties numériques. Le fonctionnement est simple : lorsqu’on appuie sur le premier bouton, le programme incrémente un compteur et allume une LED supplémentaire sur le bargraphe. À chaque appui, le nombre de LED allumées augmente progressivement, jusqu’à atteindre le maximum disponible. Le second bouton permet de décrémenter ce compteur et d’éteindre une LED à chaque appui, jusqu’à ce que toutes les LED soient éteintes. Schéma du circuit Programme du circuit const int btn_minus = 2; //Bouton 1 pour décrémenter le nombre de LEDs allumés const int btn_plus = 3; //Bouton 2 pour incrémenter le nombre de LEDs allumés const int led_0 = 4; //Led 0 const int led_1 = 5; //Led 1 const int led_2 = 6; //Led 2 const int led_3 = 7; //Led 3 const int led_4 = 8; //Led 4 const int led_5 = 9; //Led 5 const int led_6 = 10; //Led 6 const int led_7 = 11; //Led 7 const int led_8 = 12; //Led 8 const int led_9 = 13; //Led 9 /* Déclaration des variables utilisées pour le comptage et le décomptage */ int nombre_led = 0; //le nombre qui sera incrémenté et décrémenté int etat_bouton; //lecture de l'état des boutons (un seul à la fois, mais une variable suffit; en effet, il n'est pas prévu d'appuyer sur les deux boutons simultanément) int memoire_plus = LOW; //état relâché par défaut pour le bouton 2 int memoire_minus = LOW; //état relâché par défaut pour le bouton 1 /* Initialisation des broches en entrée/sortie: entrées pour les boutons, sorties pour les LEDs */ void setup() { pinMode(btn_plus, INPUT); pinMode(btn_minus, INPUT); pinMode(led_0, OUTPUT); pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); pinMode(led_3, OUTPUT); pinMode(led_4, OUTPUT); pinMode(led_5, OUTPUT); pinMode(led_6, OUTPUT); pinMode(led_7, OUTPUT); pinMode(led_8, OUTPUT); pinMode(led_9, OUTPUT); } void loop() { etat_bouton = digitalRead(btn_plus); //Si le bouton a un état différent que celui enregistré ET que cet état est "appuyé" if ((etat_bouton != memoire_plus) && (etat_bouton == HIGH)) { nombre_led++; //on incrémente la variable qui indique combien de LEDs devrons s'allumer } memoire_plus = etat_bouton; //on enregistre l'état du bouton pour le tour suivant etat_bouton = digitalRead(btn_minus); //lecture de son état if ((etat_bouton != memoire_minus) && (etat_bouton == HIGH)) { nombre_led--; //on décrémente la valeur de nombre_led } memoire_minus = etat_bouton; //on enregistre l'état du bouton pour le tour suivant //on applique des limites au nombre pour ne pas dépasser 4 ou 0 (puisqu'on a 4 LEDs) if (nombre_led > 10) { nombre_led = 10; } if (nombre_led < 0) { nombre_led = 0; } affiche(nombre_led); } void affiche(int valeur_recue) { //on éteint toutes les leds digitalWrite(led_0, LOW); digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); digitalWrite(led_4, LOW); digitalWrite(led_5, LOW); digitalWrite(led_6, LOW); digitalWrite(led_7, LOW); digitalWrite(led_8, LOW); digitalWrite(led_9, LOW); //Puis on les allume une à une if (valeur_recue >= 1) { digitalWrite(led_0, HIGH); // "on allume la LED 0 } if (valeur_recue >= 2) { digitalWrite(led_1, HIGH); // "on allume la LED 1 (sous-entendu que la LED 0 est allumée, puisque la valeur est plus grande que 1) } if (valeur_recue >= 3) { digitalWrite(led_2, HIGH); // "on allume la LED 2 } if (valeur_recue >= 4) { digitalWrite(led_3, HIGH); // "on allume la LED 3 } if (valeur_recue >= 5) { digitalWrite(led_4, HIGH); // "on allume la LED 3 } if (valeur_recue >= 6) { digitalWrite(led_5, HIGH); // "on allume la LED 3 } if (valeur_recue >= 7) { digitalWrite(led_6, HIGH); // "on allume la LED 3 } if (valeur_recue >= 8) { digitalWrite(led_7, HIGH); // "on allume la LED 3 } if (valeur_recue >= 9) { digitalWrite(led_8, HIGH); // "on allume la LED 3 } if (valeur_recue >= 10) { digitalWrite(led_9, HIGH); // "on allume la LED 3 } } Ce bargraphe peut être utilisé pour représenter un niveau, comme un volume sonore, une charge de batterie ou une intensité lumineuse. Il constitue une excellente introduction à la programmation embarquée et à l’interaction homme-machine.