Comprendre et organiser la logique d'un programme
Cette ressource présente les éléments fondamentaux du langage C++ nécessaires pour lire,
comprendre et organiser un programme destiné à une carte Arduino : instructions, variables,
constantes, types, opérateurs, conditions, boucles, fonctions et portée des variables.
Un programme est constitué d'instructions exécutées dans un ordre déterminé.
int compteur = 0; compteur = compteur + 1;
Une instruction se termine par un point-virgule.
int temperature = 20; temperature = temperature + 5;
Les accolades { et } regroupent plusieurs instructions dans un même bloc.
if (temperature > 25) { etatVentilateur = true; compteur = compteur + 1; }
L'indentation n'est pas obligatoire pour le compilateur, mais elle rend le programme beaucoup plus lisible.
Les commentaires permettent d'expliquer le programme. Ils ne sont pas exécutés.
// Déclaration de la température int temperature = 20;
/*
Ce programme analyse
la température du système.
*/
Une variable est une zone de mémoire possédant :
int compteur = 0;
| Élément | Signification |
|---|---|
int |
Type de la variable |
compteur |
Nom de la variable |
0 |
Valeur initiale |
La valeur peut ensuite être modifiée :
compteur = 5; compteur = compteur + 1;
Une constante possède une valeur qui ne doit pas changer pendant l'exécution du programme.
const byte LED_VERTE = 8; const int SEUIL_TEMPERATURE = 30;
Le type indique la nature de l'information stockée.
| Type | Utilisation | Exemple |
|---|---|---|
bool |
Valeur vraie ou fausse | bool actif = false; |
byte |
Petit entier positif | byte broche = 8; |
int |
Nombre entier | int compteur = 15; |
long |
Grand nombre entier | long distance = 250000; |
unsigned long |
Grand nombre entier positif | unsigned long temps = 0; |
float |
Nombre décimal | float tension = 4.75; |
char |
Un caractère | char lettre = 'A'; |
Une variable de type bool ne peut prendre que deux valeurs :
true false
bool systemeActif = false; systemeActif = true;
Le signe = place une valeur dans une variable.
temperature = 25;
La variable temperature reçoit la valeur 25. Ce n'est pas une égalité mathématique.
compteur = compteur + 1;
Cette instruction signifie :
compteur ;1 ;compteur.L'instruction peut être raccourcie :
compteur++;
| Opérateur | Opération | Exemple |
|---|---|---|
+ | Addition | a + b |
- | Soustraction | a - b |
* | Multiplication | a * b |
/ | Division | a / b |
% | Reste d'une division | a % b |
int valeur = 17; int reste = valeur % 2;
Une comparaison produit une valeur booléenne : true ou false.
| Opérateur | Signification |
|---|---|
== | Est égal à |
!= | Est différent de |
< | Est inférieur à |
> | Est supérieur à |
<= | Est inférieur ou égal à |
>= | Est supérieur ou égal à |
temperature > 30
Cette expression vaut :
true si la température est supérieure à 30 ;false dans le cas contraire.temperature = 30;
La variable reçoit la valeur 30.
temperature == 30
Le programme vérifie si la température est égale à 30.
= avec la comparaison ==.
Les opérateurs logiques permettent d'associer plusieurs conditions.
| Opérateur | Signification |
|---|---|
&& | ET |
|| | OU |
! | NON |
Les deux conditions doivent être vraies.
if (temperature > 20 && temperature < 30) { etat = 1; }
Au moins une condition doit être vraie.
if (mode == 1 || mode == 2) { autorisation = true; }
L'opérateur ! inverse une valeur booléenne.
bool actif = true; actif = !actif;
etatLed = !etatLed;
La structure if exécute un bloc seulement si une condition est vraie.
if (temperature > 30) { alarme = true; }
Si la condition est fausse, le bloc est ignoré.
if (temperature > 30) { alarme = true; } else { alarme = false; }
Un seul des deux blocs est exécuté.
Elle permet de choisir entre plusieurs situations.
if (temperature < 15) { etat = 0; } else if (temperature < 25) { etat = 1; } else { etat = 2; }
Le programme teste les conditions dans l'ordre. Pour une température de 10 :
temperature < 15 est vraie ;
La structure switch...case permet d'exécuter des instructions différentes selon la valeur d'une variable.
switch (mode) { case 0: etat = 10; break; case 1: etat = 20; break; case 2: etat = 30; break; default: etat = 0; break; }
| Élément | Rôle |
|---|---|
switch (mode) |
Indique la variable à analyser. |
case 1: |
Correspond à la situation où mode vaut 1. |
break; |
Permet de quitter la structure après l'exécution du bloc. |
default: |
Est exécuté si aucune valeur précédente ne correspond. |
Une boucle permet de répéter plusieurs fois un bloc d'instructions.
while (compteur < 5) { compteur++; }
Le bloc est répété tant que la condition est vraie.
| Passage | Valeur avant exécution | Condition |
|---|---|---|
| 1 | 0 | Vraie |
| 2 | 1 | Vraie |
| 3 | 2 | Vraie |
| 4 | 3 | Vraie |
| 5 | 4 | Vraie |
| Sortie | 5 | Fausse |
while (compteur < 5) { etat = true; }
compteur ne change jamais. La condition reste donc toujours vraie et le programme ne quitte pas la boucle.
La boucle for est utilisée lorsque le nombre de répétitions est connu.
for (int i = 0; i < 4; i++) { compteur++; }
| Élément | Rôle |
|---|---|
int i = 0 | Crée le compteur et lui donne la valeur initiale 0. |
i < 4 | Est la condition de poursuite. |
i++ | Augmente le compteur après chaque passage. |
i : 0, 1, 2 et 3.
Une fonction regroupe plusieurs instructions sous un même nom.
Elle permet :
void initialiserCompteur() { compteur = 0; }
Appel de la fonction :
initialiserCompteur();
Le mot void signifie que la fonction ne renvoie aucune valeur.
void modifierCompteur(int nouvelleValeur) { compteur = nouvelleValeur; }
Appel de la fonction :
modifierCompteur(5);
La valeur 5 est transmise à l'argument nouvelleValeur.
int obtenirCompteur() { return compteur; }
Appel de la fonction :
int valeur = obtenirCompteur();
La fonction renvoie un entier grâce à l'instruction return.
int additionner(int valeur1, int valeur2) { int resultat = valeur1 + valeur2; return resultat; }
Appel de la fonction :
int somme = additionner(4, 3);
Déroulement :
valeur1 reçoit 4 ;valeur2 reçoit 3 ;somme reçoit 7.Une variable déclarée en dehors des fonctions est une variable globale.
int compteur = 0; void fonction1() { compteur++; } void fonction2() { compteur = 10; }
Elle peut être utilisée par toutes les fonctions du programme.
Une variable déclarée dans une fonction ou dans un bloc est une variable locale.
void calculer() { int resultat = 5; }
La variable resultat n'existe que dans la fonction calculer().
void fonction1() { int valeur = 10; } void fonction2() { valeur = 20; // Erreur : valeur n'existe pas ici }
int compteur = 0 // Erreur
Correction :
int compteur = 0;
if (compteur = 5) // Incorrect dans ce contexte
Correction :
if (compteur == 5)
if (compteur > 2) { compteur = 0; // Il manque l'accolade de fermeture
Le langage C++ est sensible à la casse :
compteur Compteur COMPTEUR
Ces trois noms sont différents.
À éviter :
int compteur;
Il est préférable de donner immédiatement une valeur :
int compteur = 0;
Voici les notions essentielles à retenir.
constifelse ifelseswitch...casewhile : tant quefor : nombre définireturnvoid : aucun retour; en fin d'instruction= différent de ==