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.