BAC PRO CIEL

← Retour Arduino Cours
Fiche connaissance

Arduino - Bases du langage C++

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.

Comment le langage C++ permet-il de décrire et d'organiser le fonctionnement d'un système piloté par une carte Arduino ?

Sommaire

  1. Organisation d'un programme C++
  2. Variables et constantes
  3. Principaux types de données
  4. Affectation et calculs
  5. Opérateurs de comparaison
  6. Opérateurs logiques
  7. Conditions
  8. Structure switch...case
  9. Boucles while et for
  10. Fonctions
  11. Portée des variables
  12. Erreurs fréquentes
  13. Synthèse

1. Organisation d'un programme C++

Un programme est constitué d'instructions exécutées dans un ordre déterminé.

int compteur = 0;
compteur = compteur + 1;

Les instructions

Une instruction se termine par un point-virgule.

int temperature = 20;
temperature = temperature + 5;
Attention :
l'oubli d'un point-virgule provoque une erreur lors de la compilation.

Les blocs d'instructions

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

Les commentaires permettent d'expliquer le programme. Ils ne sont pas exécutés.

Sur une ligne

// Déclaration de la température
int temperature = 20;

Sur plusieurs lignes

/*
  Ce programme analyse
  la température du système.
*/
À retenir :
un programme est une suite d'instructions. Les points-virgules terminent les instructions et les accolades délimitent les blocs.

2. Les variables et les constantes

Une variable

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;
Après ces deux instructions, la variable compteur contient la valeur 6.

Une constante

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;
À retenir :
les noms des constantes sont généralement écrits en majuscules pour les repérer facilement.

3. Les principaux types de données

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';

Les valeurs booléennes

Une variable de type bool ne peut prendre que deux valeurs :

true
false
bool systemeActif = false;
systemeActif = true;
Une variable booléenne est particulièrement utile pour mémoriser l'état d'un système, d'un mode ou d'un voyant.

4. L'affectation et les calculs

L'opérateur d'affectation

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 :

  1. lire la valeur de compteur ;
  2. ajouter 1 ;
  3. enregistrer le résultat dans compteur.

L'instruction peut être raccourcie :

compteur++;

Les opérateurs de calcul

Opérateur Opération Exemple
+Additiona + b
-Soustractiona - b
*Multiplicationa * b
/Divisiona / b
%Reste d'une divisiona % b
int valeur = 17;
int reste = valeur % 2;
La variable reste vaut 1. La valeur 17 est donc impaire.

5. Les opérateurs de comparaison

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 :

Affectation

temperature = 30;

La variable reçoit la valeur 30.

Comparaison

temperature == 30

Le programme vérifie si la température est égale à 30.

Attention :
ne pas confondre l'affectation = avec la comparaison ==.

6. Les opérateurs logiques

Les opérateurs logiques permettent d'associer plusieurs conditions.

Opérateur Signification
&&ET
||OU
!NON

Opérateur ET

Les deux conditions doivent être vraies.

if (temperature > 20 && temperature < 30)
{
    etat = 1;
}

Opérateur OU

Au moins une condition doit être vraie.

if (mode == 1 || mode == 2)
{
    autorisation = true;
}

Opérateur NON

L'opérateur ! inverse une valeur booléenne.

bool actif = true;
actif = !actif;
Après cette instruction, actif vaut false.
etatLed = !etatLed;
Cette écriture permet notamment de faire changer un état à chaque événement.

7. Les conditions

La structure if

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é.

La structure if...else

if (temperature > 30)
{
    alarme = true;
}
else
{
    alarme = false;
}

Un seul des deux blocs est exécuté.

La structure if...else if...else

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 :

8. La structure switch...case

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.

9. Les boucles

Une boucle permet de répéter plusieurs fois un bloc d'instructions.

La boucle while

while (compteur < 5)
{
    compteur++;
}

Le bloc est répété tant que la condition est vraie.

Passage Valeur avant exécution Condition
10Vraie
21Vraie
32Vraie
43Vraie
54Vraie
Sortie5Fausse
La variable compteur vaut finalement 5.

Risque de boucle infinie

while (compteur < 5)
{
    etat = true;
}
La valeur de compteur ne change jamais. La condition reste donc toujours vraie et le programme ne quitte pas la boucle.

La boucle for

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 = 0Crée le compteur et lui donne la valeur initiale 0.
i < 4Est la condition de poursuite.
i++Augmente le compteur après chaque passage.
Le bloc est exécuté quatre fois pour les valeurs de i : 0, 1, 2 et 3.

10. Les fonctions

Une fonction regroupe plusieurs instructions sous un même nom.

Elle permet :

Fonction sans argument et sans retour

void initialiserCompteur()
{
    compteur = 0;
}

Appel de la fonction :

initialiserCompteur();

Le mot void signifie que la fonction ne renvoie aucune valeur.

Fonction avec argument et sans retour

void modifierCompteur(int nouvelleValeur)
{
    compteur = nouvelleValeur;
}

Appel de la fonction :

modifierCompteur(5);

La valeur 5 est transmise à l'argument nouvelleValeur.

Fonction sans argument et avec retour

int obtenirCompteur()
{
    return compteur;
}

Appel de la fonction :

int valeur = obtenirCompteur();

La fonction renvoie un entier grâce à l'instruction return.

Fonction avec arguments et avec retour

int additionner(int valeur1, int valeur2)
{
    int resultat = valeur1 + valeur2;
    return resultat;
}

Appel de la fonction :

int somme = additionner(4, 3);

Déroulement :

  1. valeur1 reçoit 4 ;
  2. valeur2 reçoit 3 ;
  3. la fonction calcule 7 ;
  4. elle renvoie le résultat ;
  5. la variable somme reçoit 7.

11. Portée des variables

Variable globale

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.

Variable locale

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
}

12. Les erreurs fréquentes

Oubli du point-virgule

int compteur = 0 // Erreur

Correction :

int compteur = 0;

Confusion entre affectation et comparaison

if (compteur = 5) // Incorrect dans ce contexte

Correction :

if (compteur == 5)

Accolade manquante

if (compteur > 2)
{
    compteur = 0;
// Il manque l'accolade de fermeture

Majuscules et minuscules

Le langage C++ est sensible à la casse :

compteur
Compteur
COMPTEUR

Ces trois noms sont différents.

Variable non initialisée

À éviter :

int compteur;

Il est préférable de donner immédiatement une valeur :

int compteur = 0;

13. Synthèse

Voici les notions essentielles à retenir.

Variable

  • Stocker une valeur modifiable
  • Nom, type et valeur
  • Initialisation conseillée

Constante

  • Valeur fixe
  • Mot-clé const
  • Nom souvent en majuscules

Conditions

  • if
  • else if
  • else
  • switch...case

Boucles

  • while : tant que
  • for : nombre défini
  • Attention aux boucles infinies

Fonctions

  • Regrouper des instructions
  • Arguments possibles
  • Retour avec return
  • void : aucun retour

Points de vigilance

  • ; en fin d'instruction
  • = différent de ==
  • Accolades équilibrées
  • Respect de la casse
Points clés à retenir :
une variable stocke une donnée modifiable ; une condition permet de choisir ; une boucle répète un traitement ; une fonction regroupe des instructions et peut recevoir des arguments ou renvoyer une valeur.