XIV. Projet 6 : l'incrémentation▲
Il est possible d'appliquer aux valeurs des variables diverses opérations mathématiques. Commençons tout de suite par un petit exemple : l'incrémentation. Il s'agit simplement d'additionner 1 à la variable. À chaque fois qu'on répète le code, on prend la valeur de la variable et on y ajoute 1.
Cela se fait grâce à ce code (var étant une variable à choix) : var++;.
var++; revient à écrire : var = var + 1;.
Le circuit sera des plus classiques : on va reprendre notre chenillard.
Liste des composants
- 4 LED rouges ;
- 4 résistances de 220 à 470 Ω ;
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
/*
Code 5 - Edurobot.ch, destiné à l' Arduino
Objectif : faire clignoter 10 fois la LED montée sur le port 13
*/
//***** EN-TÊTE DÉCLARATIF *****
// On déclare les variables, les constantes...
byte compteur; //On définit la variable "compteur"
const int led1= 13; //On renomme la broche 10 en "led1"
//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et une seule fois, au démarrage du programme
void setup()
{
pinMode(led1, OUTPUT); // Initialise la broche 13 comme sortie
Serial.begin(9600); // Ouvre le port série à 9600 bauds
// Exécute le programme entre accolades en partant de zéro et en incrémentant à chaque fois la
// valeur de +1: 0+1/2+1/3+1... jusqu'à ce que la variable « compteur » soit égale à 9 (plus petit que 10).
for(compteur=0 ; compteur<10 ; compteur++)
{ // début du programme exécuté 10 fois
digitalWrite(led1, HIGH); // allume la LED
delay(500); // attend 500ms
digitalWrite(led1, LOW); // éteint la LED
delay(500); // attend 500ms
}
// fin du programme exécuté 10 fois
}
void loop() {
} // vide, car programme déjà exécuté dans setup
Analyse du code (6)
Revenons à notre code et analysons-le.
La ligne byte compteur; permet de créer une variable appelée compteur. byte indique le type de la variable, c'est-à-dire le type de données que l'on pourra stocker dans cette variable. Comme nous l'avons déjà vu, le type byte permet de stocker des valeurs comprises entre 0 et 255.
La ligne const int led1= 13; permet de créer une constante (une variable) nommée led1 dans laquelle on stocke la valeur 13.
La ligne for(compteur=0 ; compteur<10 ; compteur++) sert à faire varier la variable compteur de 0 à 9 (en l'augmentant à chaque fois de 1 : c'est ce que fait l'instruction compteur++).
Regardons cette ligne d'un peu plus près :
for(compteur=0 ; compteur<10 ; compteur++)
La déclaration for est habituellement utilisée pour répéter un bloc d'instructions entourées de parenthèses. On l'utilise souvent avec un compteur incrémentiel, qui permet de terminer une boucle après un certain nombre de fois.
La suite, à savoir compteur=0 ; compteur<10 ; compteur++ doit être comprise comme suit : « la valeur de la variable compteur est comprise entre 0 et 9 (<10 signifie « plus petit que 10 ») et ajoute un à la valeur de compteur (c'est le compteur++) ».
En conclusion, cette ligne signifie :
« Au commencement, la variable compteur est égale à zéro. On va exécuter le code en boucle. À chaque fois, on ajoute +1 à ta variable compteur, jusqu'à ce qu'on arrive à 9. À ce moment, on s'arrête. »
Le code qui est exécuté à chaque fois est celui qui est compris jusqu'à l'accolade }. Dans notre cas, c'est le code suivant qui est exécuté 10 fois :
24.
25.
26.
digitalWrite(Led1, HIGH); // allume la LED
delay(500); // attend 500 ms
digitalWrite(Led1, LOW); // éteint la LED
delay(500); // attend 500 ms
Voici les parties d'une déclaration for :
L'initialisation est effectuée en premier et une seule fois. À chaque passage de la boucle, la condition est testée. Si elle est « vrai », le contenu de la boucle for est exécuté (par exemple faire clignoter une LED), et l'incrément de la variable est réalisé. Ensuite, la condition est testée à nouveau. Dès que le résultat du test de la condition est « faux », la boucle s'arrête.
Nous pouvons sans problème utiliser une incrémentation et un for pour réaliser le pinMode de LED qui se suivent, par exemple pour réaliser un chenillard :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
/*
Code 6 - Edurobot.ch, destiné à l'Arduino
Objectif : faire un chenillard à 4 LED montées sur les ports 10 à 13
*/
//***** EN-TÊTE DÉCLARATIF *****
// Définition de la variable « temps »
int timer = 100; // Durée, en millisecondes
//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et une seule fois, au démarrage du programme
void setup() {
// Déclaration des broches 10 à 13 à l'aide d'un for et d'un incrément.
for (int thisPin = 10; thisPin < 14; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// Boucle de la broche 10 à la broche 13 :
for (int thisPin = 10; thisPin < 14; thisPin++) { // Incrément faisant passer la variable thisPin de 10 à 13
digitalWrite(thisPin, HIGH); // Allumer la LED
delay(timer); // Durée
digitalWrite(thisPin, LOW); // Éteindre la LED
}
// Boucle de la broche 13 à la broche 10 :
for (int thisPin = 13; thisPin >= 10; thisPin--) { // Décrément faisant passer la variable thisPin de 13 à 10
digitalWrite(thisPin, HIGH); // Allumer la LED
delay(timer); // Durée
digitalWrite(thisPin, LOW); // Éteindre la LED;
}
}
Analyse du code
Regardons maintenant un peu ce code, en particulier :
17.
18.
for (int thisPin = 10; thisPin < 14; thisPin++) {
pinMode(thisPin, OUTPUT);
}
Sa première particularité est la manière de définir les broches. Au lieu d'accumuler les pinMode (xxx, OUTPUT);, on crée une variable de type int qu'on appelle thisPin(7) et donc la valeur initiale est de 10. Un for avec un incrément (++) permet d'incrémenter la valeur de la variable de 10 à 14. Il suffit ensuite de
remplacer dans le pinMode le numéro de la broche par la variable thisPin. Ainsi, les broches 10, 11, 12, 13 et 14 sont définies en OUTPUT. Naturellement, cela ne fonctionne que si les broches utilisées se suivent (par exemple : 10, 11, 12, 13. Cela ne fonctionnera pas pour des broches 3, 5, 7, 8, 10).
Passons maintenant à la seconde partie :
24.
25.
26.
27.
for (int thisPin = 10; thisPin < 14; thisPin++) { // Incrément faisant passer la variable thisPin de 10 à 13
digitalWrite(thisPin, HIGH); // Allumer la LED
delay(timer); // Durée
digitalWrite(thisPin, LOW); // Éteindre la LED
}
Comme pour la définition des broches en OUTPUT, on utilise la boucle for pour incrémenter la variable thisPin de 10 à 13. Ainsi, on allume les LED connectées sur les broches 10 à 13 l'une après l'autre.
Enfin dans la troisième partie du code, on va allumer les LED de la broche 13 à la broche 10 avec une boucle for et une décrémentation. Pour cela, on remplace le ++ par un --.
30.
31.
32.
33.
34.
// Boucle de la broche 13 à la broche 10:
for (int thisPin = 13; thisPin >= 10; thisPin--) { // Décrément faisant passer la variable thisPin de 13 à 10
digitalWrite(thisPin, HIGH); // Allumer la LED
delay(timer); // Durée
digitalWrite(thisPin, LOW); // Éteindre la LED;
}






