Article original : How to Use Switch Case in Arduino – Control LEDs With the Switch Statement
Vous pouvez utiliser une instruction switch case pour exécuter différents blocs de code en fonction de la valeur d'une variable. Cela offre une approche plus directe et plus propre pour gérer plusieurs conditions.
Dans cet article, vous apprendrez à contrôler des LEDs en utilisant une instruction switch case dans Arduino. Vous pouvez également trouver l'instruction switch case dans d'autres langages de programmation, donc cela peut servir d'exemple pratique de leur fonctionnement.
Voici une démonstration de ce que vous allez construire :

Vous pouvez regarder la version vidéo de cet article ici :
Composants matériels
Voici les composants dont vous aurez besoin pour suivre ce tutoriel :
Carte Arduino (Uno).
Potentiomètre.
Plaque d'essai.
Trois LEDs.
Résistances pour les LEDs.
Fils de connexion.
Comment utiliser une instruction Switch Case dans Arduino
Voici la syntaxe/structure d'une instruction switch :
switch (variable) {
0case valeur1:
0
0// code à exécuter si variable == valeur1
0
0break;
0case valeur2:
0
0// code à exécuter si variable == valeur2
0
0break;
0default:
0
0// code à exécuter si variable ne correspond à aucun cas
0
0break;
}
Décomposons cela :
variable: Cela désigne la variable étant évaluée. La valeur de la variable détermine comment les blocs de code seront exécutés.case: Chaquecasereprésente une valeur qui peut correspondre à la variable étant évaluée. Si lavariableet uncaseont la même valeur, le code pour ce cas sera exécuté. Vous pouvez avoir autant de cas que vous le souhaitez.break: Après qu'un bloc de code dans uncasea été exécuté, le mot-clébreaktermine le code. C'est-à-dire qu'il empêche le code de passer à d'autres cas car une correspondance a déjà été trouvée.default: Dans une situation où aucun des cas ne correspond à lavariable, le code dans le blocdefaultsera exécuté.
Ensuite, utilisons une instruction switch pour contrôler des LEDs.
Exemple de Switch Case dans Arduino
Schéma de circuit
Voici comment connecter vos composants :

L'objectif ici est de décider quelle LED (ou une combinaison de LEDs) s'allume en fonction de la valeur d'une variable.
Connexion du potentiomètre
Connectez la borne gauche du potentiomètre à 5V.
Connectez la borne droite à GND.
Connectez la borne centrale à A0.
Connexion des LEDs
Pour chaque LED, connectez la patte la plus courte à GND.
Connectez chaque patte la plus longue à une broche numérique. Je recommande d'utiliser la broche 8 (pour la LED verte), 9 (pour la LED jaune) et 10 (pour la LED rouge) pour correspondre à ce que nous avons dans le schéma de circuit. Nous utiliserons également ces valeurs dans le code.
Voici le code complet du projet :
int greenLED = 8;
int yellowLED = 9;
int redLED = 10;
int potPin = A0;
int potValue;
int mappedPotValue;
void setup() {
0pinMode(greenLED, OUTPUT);
0pinMode(yellowLED, OUTPUT);
0pinMode(redLED, OUTPUT);
0Serial.begin(9600);
}
void loop() {
0potValue = analogRead(potPin);
0mappedPotValue = map(potValue, 0, 1023, 0, 5);
0switch (mappedPotValue) {
0
0case 0:
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 1:
0
0
0digitalWrite(greenLED, HIGH);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 2:
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, HIGH);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 3:
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, HIGH);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 4:
0
0
0digitalWrite(greenLED, HIGH);
0
0
0digitalWrite(yellowLED, HIGH);
0
0
0digitalWrite(redLED, HIGH);
0
0
0Serial.println(mappedPotValue);
0
0
0delay(500);
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0delay(500);
0
0
0break;
}
}
Décomposons le code.
Initialisation des variables
int greenLED = 8;
int yellowLED = 9;
int redLED = 10;
int potPin = A0;
int potValue;
int mappedPotValue;
Nous avons commencé par initialiser des variables pour correspondre aux connexions matérielles.
greenLED, yellowLED et redLED ont des valeurs de 8, 9 et 10, respectivement. Cela correspond aux broches auxquelles elles étaient connectées sur la carte Arduino. De même, potPin, qui est la variable pour le potentiomètre, a une valeur de A0.
Vous utiliserez la variable potValue pour stocker la valeur actuelle du potentiomètre. Nous avons également créé une variable mappedPotValue pour stocker la plage de valeurs nécessaires pour les LEDs dans une minute.
pinMode et Moniteur Série
void setup() {
0pinMode(greenLED, OUTPUT);
0pinMode(yellowLED, OUTPUT);
0pinMode(redLED, OUTPUT);
0Serial.begin(9600);
}
Dans la fonction setup(), nous avons défini les LEDs comme des broches de sortie et initialisé le moniteur série.
Logique pour l'instruction switch case
Tout d'abord, nous avons lu la valeur du potentiomètre en utilisant la fonction analogRead() et l'avons stockée dans la variable potValue :
potValue = analogRead(potPin);
Nous avons ensuite converti les valeurs du potentiomètre en une plage de 0 à 4 en utilisant la fonction map et les avons stockées dans la variable mappedPotValue :
mappedPotValue = map(potValue, 0, 1023, 0, 5);
Ensuite, nous avons créé une instruction switch—la valeur étant évaluée est mappedPotValue. Rappelez-vous que c'est la variable où nous avons stocké les valeurs du potentiomètre. Donc, chaque fois que vous tournez le potentiomètre, la valeur change et correspond potentiellement à un case :
0switch (mappedPotValue) {
0
0case 0:
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 1:
0
0
0digitalWrite(greenLED, HIGH);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 2:
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, HIGH);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 3:
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, HIGH);
0
0
0Serial.println(mappedPotValue);
0
0
0break;
0
0case 4:
0
0
0digitalWrite(greenLED, HIGH);
0
0
0digitalWrite(yellowLED, HIGH);
0
0
0digitalWrite(redLED, HIGH);
0
0
0Serial.println(mappedPotValue);
0
0
0delay(500);
0
0
0digitalWrite(greenLED, LOW);
0
0
0digitalWrite(yellowLED, LOW);
0
0
0digitalWrite(redLED, LOW);
0
0
0Serial.println(mappedPotValue);
0
0
0delay(500);
0
0
0break;
}
Nous avons passé mappedPotValue comme paramètre à switch puisque c'est la variable comparée à différents cas : switch (mappedPotValue).
Pour
case 0, toutes les LEDs seront éteintes.Pour
case 1, seule la LED verte s'allume.Pour
case 2, seule la LED jaune s'allume.Pour
case 3, seule la LED rouge s'allume.Pour
case 4, les trois LEDs clignoteront continuellement.
En utilisant une instruction switch, vous avez réussi à contrôler le comportement des LEDs en fonction de la valeur d'un potentiomètre !
Conclusion
Dans cet article, vous avez appris à utiliser une instruction switch case dans Arduino en utilisant un exemple pratique.
Vous avez appris à contrôler différentes LEDs en fonction de la valeur d'un potentiomètre. Vous avez réalisé cela en utilisant différents cas dans une instruction switch pour correspondre à la valeur actuelle du potentiomètre et exécuter le code correspondant.
Les instructions switch peuvent être utilisées de différentes manières pour rendre un projet plus dynamique. Certains cas d'utilisation dans Arduino incluent :
Gérer et interpréter les différentes valeurs, modes et états d'un composant ou d'un capteur.
Effectuer des actions basées sur des commandes spécifiques. Par exemple, faire tourner un bras robotique à un angle/direction spécifique.
Mapper les pressions de boutons aux entrées utilisateur, et ainsi de suite.
Vous pouvez regarder la version vidéo de ce projet ici. Le code complet du projet est disponible sur GitHub.
Consultez mon blog pour des articles sur les systèmes embarqués, l'IoT et le développement web.
Bon codage !