Difference between revisions of "Exercice STM Nucleo FCU"
Wiki.admin (talk | contribs) |
Wiki.admin (talk | contribs) |
||
(19 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Vous trouverez sur cette page toutes les informations, exercices, et fichiers nécessaires à la prise en main et à la réalisation d'un prototype de FCU (Flight Control Unit) dans le cadre de travaux dirigés (TD) à faire en classe. | Vous trouverez sur cette page toutes les informations, exercices, et fichiers nécessaires à la prise en main et à la réalisation d'un prototype de FCU (Flight Control Unit) dans le cadre de travaux dirigés (TD) à faire en classe. | ||
− | |||
<h3><b>Fonctions de base Nucleo</b></h3> | <h3><b>Fonctions de base Nucleo</b></h3> | ||
Line 14: | Line 13: | ||
==Installation des bibliothèques STM Nucleo dans le logiciel Arduino== | ==Installation des bibliothèques STM Nucleo dans le logiciel Arduino== | ||
+ | |||
+ | [[File:carte_nucleo.jpg|400px|thumb|center|Carte Nucleo utilisée]] | ||
+ | |||
+ | La carte X-Nucleo IKS01A2 fonctionne de la même manière qu’une carte Arduino, d’ailleurs on utilise le même logiciel (Arduino) pour la faire foctionner et reccueillir des informations. | ||
+ | |||
+ | Afin de pouvoir commander cette carte par l’intermédiaire du logiciel Arduino, il est nécessaire d’installer une bibliothèque accessible via ce lien : https://www.arduinolibraries.info/libraries/stm32duino-x-nucleo-iks01-a2 | ||
+ | |||
+ | [[File:site_stm32.png|400px|thumb|center]] | ||
+ | |||
+ | Prendre la dernière version disponible. Un fichier .zip sera alors téléchargé sur votre ordinateur. | ||
+ | |||
+ | Sur Arduino, aller dans Croquis -> Inclure une bibliothèque -> Ajouter la bibliothèque .ZIP. | ||
+ | |||
+ | Sélectionner le fichier téléchargé précédemment (ne pas le décompresser). | ||
+ | |||
+ | [[File:installation1.png|thumb|center]] | ||
+ | |||
+ | Pour inclure cette bibliothèque dans le code, aller dans Croquis -> Inclure une bibliothèque ->STM32duino-X-NUCLEO-IKS01A2, la ligne de code #include <X-NUCLEO-IKS01A2.h> doit apparaître. | ||
+ | |||
+ | [[File:installation_2.png|thumb|center]] | ||
+ | |||
+ | Il faut maintenant installer le protocole de communication utilisé pour la carte Nucleo. Pour cela, aller dans Fichier -> Préférences, puis rentrer ce lien dans URL de gestionnaire de cartes supplémentaires : https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json | ||
+ | |||
+ | Cliquer ensuite sur OK. | ||
+ | |||
+ | [[File:installation3.png|thumb|center]] | ||
+ | |||
+ | Le protocole est maintenant téléchargé, pour l’installer, aller dans Outils -> Type de carte -> Gestionnaire de carte. | ||
+ | |||
+ | Dans la barre de recherche, taper « stm », vous devriez avoir l’écran suivant : | ||
+ | |||
+ | [[File:installation4.png|thumb|center]] | ||
+ | |||
+ | Sélectionner la dernière version disponible (ici 2.4.0) puis Installer. Le processus prend quelques minutes. Si tout s’est bien déroulé, la mention INSTALLED doit apparaître. | ||
==Exercice 1 : Faire clignoter une LED== | ==Exercice 1 : Faire clignoter une LED== | ||
+ | |||
+ | <h3><b>Etape 1 : branchements</b></h3> | ||
+ | |||
+ | Branchez une LED sur une broche GPIO (par exemple, la broche PA5) de la carte Nucleo en utilisant une résistance de limitation de courant (par exemple, une résistance de 220 ohms) en série avec la LED. La borne positive de la LED doit être connectée à la broche GPIO et la borne négative doit être connectée à la résistance, puis à la masse (GND) de la carte. | ||
+ | |||
+ | <h3><b>Etape 2 : initialisation</b></h3> | ||
+ | |||
+ | Il est important de commencer par disposer d’un IDE (Integrated Developement Environnement) adapté au micro-controleur STM32. Créer un nouveau projet pour la carte Nucléo en sélectionnant le type de microcontrôleur utilisé sur votre carte Nucleo (ici STM32). | ||
+ | |||
+ | Ajoutez un fichier source "main.c" à votre projet. Ajoutez le fichier d'en-tête pour le microcontrôleur utilisé dans la carte Nucleo (par exemple, stm32fxxx.h). Ce sont les headers de la bibliothèque HAL. | ||
+ | |||
+ | [[File:exercice1_1.png|thumb|center]] | ||
+ | |||
+ | Initialisez la broche GPIO pour la sortie en écrivant un 1 dans le registre de configuration approprié (par exemple, GPIOA->MODER |= GPIO_MODER_MODE5_0). | ||
+ | |||
+ | <h3><b>Etape 3 : code</b></h3> | ||
+ | |||
+ | Bouclez indéfiniment et allumez la LED en écrivant un 1 dans le registre de sortie (par exemple, GPIOA->BSRR = GPIO_BSRR_BS5) pendant une courte période, puis éteignez la LED en écrivant un 1 dans le registre de sortie (par exemple, GPIOA->BSRR = GPIO_BSRR_BR5) pendant une autre courte période. Répétez cette séquence pour faire clignoter la LED. | ||
+ | |||
+ | Voici un exemple de code en langage C qui utilise la carte Nucleo STM32F401RE pour faire clignoter une LED connectée à la broche PA5. | ||
+ | |||
+ | [[File:exercice1_2.png|thumb|center]] | ||
+ | |||
+ | <font color = "blue">Remarque : </font>Les codes utilisent ici la broche PA5 pour la sortie de la LED, il faut bien sûr s'adapter à la broche sur laquelle on est branché. Ce code utilise la fonction "for" pour attendre pendant une courte période après chaque changement d'état de la LED. Le nombre de boucles peut être ajusté pour changer la vitesse de clignotement de la LED. | ||
+ | |||
+ | <font color = "blue">Aide : </font>Voici un schéma de branchement de branchement typique pour une LED sur une carte Nucléo. | ||
+ | |||
+ | [[File:exercice1_3.png|thumb|center]] | ||
+ | |||
+ | Dans ce schéma, R1 est la résistance de limitation de courant et GPIO est la broche GPIO de la carte Nucleo à laquelle la LED est connectée. La borne positive de la LED est connectée à la broche GPIO et la borne négative est connectée à la résistance, puis à la masse (GND) de la carte. | ||
+ | |||
+ | Notez que la valeur de la résistance R1 dépend de la tension d'alimentation de votre carte Nucleo et de la caractéristique de la LED que vous utilisez. Une valeur typique pour la résistance est de 220 ohms. | ||
+ | |||
+ | |||
+ | ==Exercice 2 : Récupérer la position d'un joystick non-analogique== | ||
+ | |||
+ | <h3><b>Etape 1 : branchements</b></h3> | ||
+ | |||
+ | Branchez le joystick sur la carte Nucleo en utilisant des câbles de raccordement. Le joystick a généralement deux axes de mouvement (X et Y) et un bouton de pression. Chaque axe est relié à deux broches (par exemple, la broche A0 et la broche A1), tandis que le bouton est relié à une autre broche (par exemple, la broche D2). Assurez-vous de connecter les broches correctes du joystick aux broches correspondantes de la carte Nucleo. | ||
+ | |||
+ | <h3><b>Etape 2 : initialisation</b></h3> | ||
+ | |||
+ | Ouvrez votre IDE et créez un nouveau projet ; ajoutez ensuite un fichier source "main.c". Incluez ensuite le header pour utiliser les fonctions HAL comme dans l'exercice précédent. | ||
+ | Dans la fonction "main.c", initialisez les broches GPIO lecture en écrivant un 0 dans le registre de configuration approprié (par exemple, GPIOA->MODER &= ~(GPIO_MODER_MODE0_Msk | GPIO_MODER_MODE1_Msk)). | ||
+ | |||
+ | <h3><b>Etape 3 : code</b></h3> | ||
+ | |||
+ | Bouclez indéfiniment et lisez les broches GPIO correspondantes pour récupérer la position du joystick. Pour cela, vous pouvez utiliser la fonction "GPIO_ReadPin" pour lire la valeur de la broche GPIO. Ensuite, vous pouvez utiliser des conditions pour déterminer la position du joystick (par exemple, si la valeur de la broche X est faible et la valeur de la broche Y est élevée, le joystick est en haut à droite). | ||
+ | |||
+ | Voici un exemple de code en langage C qui utilise la carte Nucleo STM32F401RE pour récupérer la position (non-analogique) d'un joystick connecté aux broches PA0, PA1 et PB2. | ||
+ | |||
+ | [[File:exercice2_1.png|400px|thumb|center]] | ||
+ | [[File:exercice2_2.png|400px|thumb|center]] | ||
+ | |||
+ | <font color = "blue">Remarque : </font>Cet exemple utilise les broches PC0 et PC1 pour les entrées du joystick, il faut bien sûr s'adapter aux broches sur lesquelles on est branché. | ||
+ | |||
+ | <font color = "blue">Aide : </font>Voici un schéma de branchement typique pour récupérer la position (non-analogique) d'un joystick sur une carte Nucleo. | ||
+ | |||
+ | [[File:exercice2_3.png|400px|thumb|center]] | ||
+ | |||
+ | <font color = "blue">Remarque : </font>Dans ce schéma, R1, R2 et R3 sont des résistances de pull-down, qui permettent de fixer un état de référence à chaque broche du joystick. Les broches du joystick sont reliées à la carte Nucleo en utilisant des câbles de raccordement. Les broches X-Axis et Y-Axis sont reliées à deux broches GPIO de la carte Nucleo (par exemple, les broches PA0 et PA1), tandis que la broche Button est reliée à une autre broche GPIO de la carte (par exemple, la broche PB2). Les résistances R1, R2 et R3 sont connectées entre chaque broche du joystick et la masse (GND) de la carte Nucleo. | ||
+ | |||
+ | Notez que la valeur de chaque résistance dépend de la caractéristique du joystick et de la carte Nucleo que vous utilisez. Une valeur typique pour chaque résistance est de 10k ohms. | ||
+ | |||
+ | |||
+ | ==Exercice 3 : Commander un moteur== | ||
+ | |||
+ | Branchez votre joystick en utilisant les broches analogiques de la carte, puis créez un nouveau projet sur votre IDE. | ||
+ | |||
+ | Ajoutez ensuite le code suivant pour initialiser les broches analogiques d'entrée branchées au joystick. | ||
+ | |||
+ | [[File:exercice3_1.png|400px|thumb|center]] | ||
+ | |||
+ | Créez une fonction pour lire les valeurs analogiques du joystick avec le code suivant. | ||
+ | |||
+ | [[File:exercice3_2.png|400px|thumb|center]] | ||
+ | |||
+ | Utilisez les valeurs des coordonnées pour contrôler les moteurs avec le code suivant. | ||
+ | |||
+ | [[File:exercice3_3.png|400px|thumb|center]] | ||
+ | |||
+ | Dans le programme principal (boucle "loop"), appelez les fonctions créées précédemment. | ||
+ | |||
+ | [[File:exercice3_4.png|400px|thumb|center]] | ||
+ | |||
+ | Une fois compilé et téléversé sur la carte, les mouvements du joystick contrôleront les moteurs dans les directions souhaitées avec une précision due au fonctionnement analogique (un mouvement plus appuyé entrainera plus de mouvement du moteur associé). | ||
+ | |||
+ | Ces exercices simples correspondent aux fonctions qui pourraient être utiles pour une utilisation basique de la carte Nucleo. | ||
+ | |||
+ | |||
+ | ==Exercice 4 : Récupérer la position d'un potentiomètre== | ||
+ | |||
+ | En guise de dernier exercice, nous avons pensé à une application également très concrète pour le Mini-Bee : il s'agit de la gestion par la carte Nucleo d'un potentiomètre. En effet, un drone doit pouvoir monter ou descendre verticalement, impliquant une montée ou une baisse de régime simultanée de l'ensemble des rotors. Ainsi, un potentiomètre analogique permettrait de contrôler finement l'appareil sur l'axe vertical. | ||
+ | |||
+ | Pour faire fonctionner un potentiomètre avec une carte Nucleo, voici les étapes à suivre : | ||
+ | |||
+ | Pour commencer, il faut brancher le potentiomètre sur un port GPIO de la carte (qu'il ne faut bien entendu pas oublier d'initialiser). Ensuite, on branche plusieurs LEDs à d’autres broches GPIO, sans oublier de brancher également en série des résistances de protection. Ces LEDs serviront donc à donner un indice visuel sur le niveau d'enfoncement du potentiomètre : plus le potentiomètre émet un signal analogique élevé, plus il y a de LEDs allumées. | ||
+ | |||
+ | Voici donc un exemple de code qui permettrait de récupérer la position analogique d'un potentiomètre et de l'afficher à l'aide de 3 LEDs. | ||
+ | |||
+ | #include"mbed.h" | ||
+ | |||
+ | AnalogIn enfoncement_potentiometre(A0); | ||
+ | |||
+ | DigitalOut led_1(D2); | ||
+ | DigitalOut led_2(D3); | ||
+ | DigitalOut led_3(D4); | ||
+ | |||
+ | int main() { | ||
+ | while(1) { | ||
+ | uint16_t valeur = enfoncement_potentiometre.read_u16(); | ||
+ | if (valeur < 50) { | ||
+ | led_1 = 0; | ||
+ | led_2 = 0; | ||
+ | led_3 = 0; | ||
+ | } | ||
+ | else if ((valeur >= 50) && (valeur < 2000)) { | ||
+ | led_1 = 1; | ||
+ | led_2 = 0; | ||
+ | led_3 = 0; | ||
+ | } | ||
+ | else if ((valeur >= 2000) && (valeur < 4000)) { | ||
+ | led_1 = 1; | ||
+ | led_2 = 1; | ||
+ | led_3 = 0; | ||
+ | } | ||
+ | else if (valeur >= 4000) { | ||
+ | led_1 = 1; | ||
+ | led_2 = 1; | ||
+ | led_3 = 1; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | [[Category:FCU]] |
Latest revision as of 12:06, 29 September 2023
Vous trouverez sur cette page toutes les informations, exercices, et fichiers nécessaires à la prise en main et à la réalisation d'un prototype de FCU (Flight Control Unit) dans le cadre de travaux dirigés (TD) à faire en classe.
Fonctions de base Nucleo
Void HAL_GPI0_Init() : Cette fonction est utilisée pour initialiser les broches d’entrée ou de sortie pour les LEDs ou les boutons disponibles sur la carte Nucleo.
Void HAL_UART_Init() : Cette fonction est utilisée pour initialiser le module UART (communication série), qui sert à communiquer avec l’ordinateur.
Void HAL_TIM_Base_Start() : Cette fonction est utilisée pour démarrer un timer, utile par exemple pour mettre à jour périodiquement un affichage ou une mesure d’un capteur.
Void HAL_GPI0_ReadPin/WritePin() : Cette fonction permet de lire ou d’écrire l’état d’un port de la carte Nucleo.
Installation des bibliothèques STM Nucleo dans le logiciel Arduino
La carte X-Nucleo IKS01A2 fonctionne de la même manière qu’une carte Arduino, d’ailleurs on utilise le même logiciel (Arduino) pour la faire foctionner et reccueillir des informations.
Afin de pouvoir commander cette carte par l’intermédiaire du logiciel Arduino, il est nécessaire d’installer une bibliothèque accessible via ce lien : https://www.arduinolibraries.info/libraries/stm32duino-x-nucleo-iks01-a2
Prendre la dernière version disponible. Un fichier .zip sera alors téléchargé sur votre ordinateur.
Sur Arduino, aller dans Croquis -> Inclure une bibliothèque -> Ajouter la bibliothèque .ZIP.
Sélectionner le fichier téléchargé précédemment (ne pas le décompresser).
Pour inclure cette bibliothèque dans le code, aller dans Croquis -> Inclure une bibliothèque ->STM32duino-X-NUCLEO-IKS01A2, la ligne de code #include <X-NUCLEO-IKS01A2.h> doit apparaître.
Il faut maintenant installer le protocole de communication utilisé pour la carte Nucleo. Pour cela, aller dans Fichier -> Préférences, puis rentrer ce lien dans URL de gestionnaire de cartes supplémentaires : https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
Cliquer ensuite sur OK.
Le protocole est maintenant téléchargé, pour l’installer, aller dans Outils -> Type de carte -> Gestionnaire de carte.
Dans la barre de recherche, taper « stm », vous devriez avoir l’écran suivant :
Sélectionner la dernière version disponible (ici 2.4.0) puis Installer. Le processus prend quelques minutes. Si tout s’est bien déroulé, la mention INSTALLED doit apparaître.
Exercice 1 : Faire clignoter une LED
Etape 1 : branchements
Branchez une LED sur une broche GPIO (par exemple, la broche PA5) de la carte Nucleo en utilisant une résistance de limitation de courant (par exemple, une résistance de 220 ohms) en série avec la LED. La borne positive de la LED doit être connectée à la broche GPIO et la borne négative doit être connectée à la résistance, puis à la masse (GND) de la carte.
Etape 2 : initialisation
Il est important de commencer par disposer d’un IDE (Integrated Developement Environnement) adapté au micro-controleur STM32. Créer un nouveau projet pour la carte Nucléo en sélectionnant le type de microcontrôleur utilisé sur votre carte Nucleo (ici STM32).
Ajoutez un fichier source "main.c" à votre projet. Ajoutez le fichier d'en-tête pour le microcontrôleur utilisé dans la carte Nucleo (par exemple, stm32fxxx.h). Ce sont les headers de la bibliothèque HAL.
Initialisez la broche GPIO pour la sortie en écrivant un 1 dans le registre de configuration approprié (par exemple, GPIOA->MODER |= GPIO_MODER_MODE5_0).
Etape 3 : code
Bouclez indéfiniment et allumez la LED en écrivant un 1 dans le registre de sortie (par exemple, GPIOA->BSRR = GPIO_BSRR_BS5) pendant une courte période, puis éteignez la LED en écrivant un 1 dans le registre de sortie (par exemple, GPIOA->BSRR = GPIO_BSRR_BR5) pendant une autre courte période. Répétez cette séquence pour faire clignoter la LED.
Voici un exemple de code en langage C qui utilise la carte Nucleo STM32F401RE pour faire clignoter une LED connectée à la broche PA5.
Remarque : Les codes utilisent ici la broche PA5 pour la sortie de la LED, il faut bien sûr s'adapter à la broche sur laquelle on est branché. Ce code utilise la fonction "for" pour attendre pendant une courte période après chaque changement d'état de la LED. Le nombre de boucles peut être ajusté pour changer la vitesse de clignotement de la LED.
Aide : Voici un schéma de branchement de branchement typique pour une LED sur une carte Nucléo.
Dans ce schéma, R1 est la résistance de limitation de courant et GPIO est la broche GPIO de la carte Nucleo à laquelle la LED est connectée. La borne positive de la LED est connectée à la broche GPIO et la borne négative est connectée à la résistance, puis à la masse (GND) de la carte.
Notez que la valeur de la résistance R1 dépend de la tension d'alimentation de votre carte Nucleo et de la caractéristique de la LED que vous utilisez. Une valeur typique pour la résistance est de 220 ohms.
Exercice 2 : Récupérer la position d'un joystick non-analogique
Etape 1 : branchements
Branchez le joystick sur la carte Nucleo en utilisant des câbles de raccordement. Le joystick a généralement deux axes de mouvement (X et Y) et un bouton de pression. Chaque axe est relié à deux broches (par exemple, la broche A0 et la broche A1), tandis que le bouton est relié à une autre broche (par exemple, la broche D2). Assurez-vous de connecter les broches correctes du joystick aux broches correspondantes de la carte Nucleo.
Etape 2 : initialisation
Ouvrez votre IDE et créez un nouveau projet ; ajoutez ensuite un fichier source "main.c". Incluez ensuite le header pour utiliser les fonctions HAL comme dans l'exercice précédent. Dans la fonction "main.c", initialisez les broches GPIO lecture en écrivant un 0 dans le registre de configuration approprié (par exemple, GPIOA->MODER &= ~(GPIO_MODER_MODE0_Msk | GPIO_MODER_MODE1_Msk)).
Etape 3 : code
Bouclez indéfiniment et lisez les broches GPIO correspondantes pour récupérer la position du joystick. Pour cela, vous pouvez utiliser la fonction "GPIO_ReadPin" pour lire la valeur de la broche GPIO. Ensuite, vous pouvez utiliser des conditions pour déterminer la position du joystick (par exemple, si la valeur de la broche X est faible et la valeur de la broche Y est élevée, le joystick est en haut à droite).
Voici un exemple de code en langage C qui utilise la carte Nucleo STM32F401RE pour récupérer la position (non-analogique) d'un joystick connecté aux broches PA0, PA1 et PB2.
Remarque : Cet exemple utilise les broches PC0 et PC1 pour les entrées du joystick, il faut bien sûr s'adapter aux broches sur lesquelles on est branché.
Aide : Voici un schéma de branchement typique pour récupérer la position (non-analogique) d'un joystick sur une carte Nucleo.
Remarque : Dans ce schéma, R1, R2 et R3 sont des résistances de pull-down, qui permettent de fixer un état de référence à chaque broche du joystick. Les broches du joystick sont reliées à la carte Nucleo en utilisant des câbles de raccordement. Les broches X-Axis et Y-Axis sont reliées à deux broches GPIO de la carte Nucleo (par exemple, les broches PA0 et PA1), tandis que la broche Button est reliée à une autre broche GPIO de la carte (par exemple, la broche PB2). Les résistances R1, R2 et R3 sont connectées entre chaque broche du joystick et la masse (GND) de la carte Nucleo.
Notez que la valeur de chaque résistance dépend de la caractéristique du joystick et de la carte Nucleo que vous utilisez. Une valeur typique pour chaque résistance est de 10k ohms.
Exercice 3 : Commander un moteur
Branchez votre joystick en utilisant les broches analogiques de la carte, puis créez un nouveau projet sur votre IDE.
Ajoutez ensuite le code suivant pour initialiser les broches analogiques d'entrée branchées au joystick.
Créez une fonction pour lire les valeurs analogiques du joystick avec le code suivant.
Utilisez les valeurs des coordonnées pour contrôler les moteurs avec le code suivant.
Dans le programme principal (boucle "loop"), appelez les fonctions créées précédemment.
Une fois compilé et téléversé sur la carte, les mouvements du joystick contrôleront les moteurs dans les directions souhaitées avec une précision due au fonctionnement analogique (un mouvement plus appuyé entrainera plus de mouvement du moteur associé).
Ces exercices simples correspondent aux fonctions qui pourraient être utiles pour une utilisation basique de la carte Nucleo.
Exercice 4 : Récupérer la position d'un potentiomètre
En guise de dernier exercice, nous avons pensé à une application également très concrète pour le Mini-Bee : il s'agit de la gestion par la carte Nucleo d'un potentiomètre. En effet, un drone doit pouvoir monter ou descendre verticalement, impliquant une montée ou une baisse de régime simultanée de l'ensemble des rotors. Ainsi, un potentiomètre analogique permettrait de contrôler finement l'appareil sur l'axe vertical.
Pour faire fonctionner un potentiomètre avec une carte Nucleo, voici les étapes à suivre :
Pour commencer, il faut brancher le potentiomètre sur un port GPIO de la carte (qu'il ne faut bien entendu pas oublier d'initialiser). Ensuite, on branche plusieurs LEDs à d’autres broches GPIO, sans oublier de brancher également en série des résistances de protection. Ces LEDs serviront donc à donner un indice visuel sur le niveau d'enfoncement du potentiomètre : plus le potentiomètre émet un signal analogique élevé, plus il y a de LEDs allumées.
Voici donc un exemple de code qui permettrait de récupérer la position analogique d'un potentiomètre et de l'afficher à l'aide de 3 LEDs.
#include"mbed.h" AnalogIn enfoncement_potentiometre(A0); DigitalOut led_1(D2); DigitalOut led_2(D3); DigitalOut led_3(D4); int main() { while(1) { uint16_t valeur = enfoncement_potentiometre.read_u16(); if (valeur < 50) { led_1 = 0; led_2 = 0; led_3 = 0; } else if ((valeur >= 50) && (valeur < 2000)) { led_1 = 1; led_2 = 0; led_3 = 0; } else if ((valeur >= 2000) && (valeur < 4000)) { led_1 = 1; led_2 = 1; led_3 = 0; } else if (valeur >= 4000) { led_1 = 1; led_2 = 1; led_3 = 1; } } }