Illustration : ordinateur portable relié en USB à une carte microcontrôleur, éditeur de code et moniteur série à l'écran

Illustration générée par IA

Mis à jour le Par Emmanuel SAUVAGE
Enregistrer

Arduino C : structure sketch, setup/loop, Serial Monitor

Structure sketch Arduino : setup/loop, Serial. 20 exercices.

Réponse directe (octobre 2026) — Un sketch Arduino = fichier .ino avec setup() (une fois) et loop() (infini). L’IDE ajoute les #include Arduino et le main() caché ; vous ne l’écrivez pas à la main.

Arduino C (souvent appelé « Arduino C ») est du C/C++ adapté à des microcontrôleurs. En robotique, l’idée est simple : ton programme tourne en boucle sur la carte et lit des capteurs / commande des actionneurs (LED, moteurs, buzzer…).

Dans cette leçon, tu apprends :

  • la structure d’un sketch (setup() / loop()),
  • comment vérifier que ça compile,
  • comment utiliser Serial (très utile pour déboguer),
  • quelques bonnes pratiques dès le début.

Les exemples fonctionnent sur Arduino “classique”. Sur mBot/mCore via mBlock en mode Arduino C, tu as la même logique, avec en plus des bibliothèques Makeblock.

1) La structure d’un sketch : setup() et loop()

Un sketch Arduino contient presque toujours :

  • setup() : exécutée une fois au démarrage.
  • loop() : exécutée en boucle (encore et encore).

Schéma logique :

démarrage carte
  └── setup() (1 fois)
        └── loop() (répété à l’infini)
              └── loop()
                    └── loop()

Exemple minimal :

void setup() {
  // 1 fois
}

void loop() {
  // en boucle
}

2) Compiler et téléverser (le réflexe)

  • Compiler / Vérifier : repérer les erreurs sans toucher au robot.
  • Téléverser : envoyer le programme sur la carte.

Bonne pratique : fais des petits changements, compile souvent, et teste progressivement.

3) Déboguer avec Serial

Serial te permet d’afficher des messages sur l’ordinateur (moniteur série). C’est l’équivalent du print() en Python.

void setup() {
  Serial.begin(9600);
  Serial.println("Bonjour !");
}

void loop() {
  Serial.println("Je tourne");
  delay(1000);
}

Bonnes pratiques :

  • toujours appeler Serial.begin(...) dans setup(),
  • ne pas spammer trop vite : mets un delay(...) ou utilise millis() (plus tard).

4) Bonnes pratiques (dès maintenant)

  • Nommer clairement : compteur, distance_cm, etat.
  • Utiliser const pour les constantes : const int LED_PIN = 13;
  • Éviter les « nombres magiques » dans le code (ex. 9600, 13, 1000) : mets-les dans des constantes.

Exercices (20)

Les solutions sont masquées : clique sur Afficher la solution.

Niveau simple

Exercice 1 — Écris un sketch vide qui compile : setup() + loop() vides. Simple

Afficher la solution
void setup() {}
void loop() {}

Exercice 2 — Ajoute un commentaire en haut avec ton prénom et la date (sans changer le comportement). Simple

Afficher la solution
// Auteur : Lina — 2026-04-02
void setup() {}
void loop() {}

Exercice 3 — Initialise Serial dans setup() en 9600 bauds. Simple

Afficher la solution
void setup() {
  Serial.begin(9600);
}
void loop() {}

Exercice 4 — Affiche Bonjour une seule fois au démarrage. Simple

Afficher la solution
void setup() {
  Serial.begin(9600);
  Serial.println("Bonjour");
}
void loop() {}

Exercice 5 — Affiche Je tourne toutes les 2 secondes dans loop(). Simple

Afficher la solution
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("Je tourne");
  delay(2000);
}

Exercice 6 — Déclare une constante const int BAUD = 9600; et utilise-la. Simple

Afficher la solution
const int BAUD = 9600;

void setup() { Serial.begin(BAUD); } void loop() {}

Exercice 7 — Affiche une ligne --- au démarrage, puis OK. Simple

Afficher la solution
void setup() {
  Serial.begin(9600);
  Serial.println("---");
  Serial.println("OK");
}
void loop() {}

Niveau intermédiaire

Exercice 8 — Crée une variable globale int compteur = 0; et affiche-la toutes les secondes, puis incrémente-la. Intermédiaire

Afficher la solution
int compteur = 0;

void setup() { Serial.begin(9600); }

void loop() { Serial.println(compteur); compteur++; delay(1000); }

Exercice 9 — Affiche compteur= puis la valeur sur la même ligne. Intermédiaire

Afficher la solution
int compteur = 0;

void setup() { Serial.begin(9600); }

void loop() { Serial.print(“compteur=”); Serial.println(compteur); compteur++; delay(1000); }

Exercice 10 — N’affiche le compteur que de 0 à 9, puis affiche FIN et arrête (boucle infinie volontaire). Intermédiaire

Afficher la solution
int compteur = 0;

void setup() { Serial.begin(9600); }

void loop() { if (compteur <= 9) { Serial.println(compteur); compteur++; delay(500); } else { Serial.println(“FIN”); while (true) { // stop } } }

Exercice 11 — Ajoute une fonction void logStart() qui écrit START sur Serial, et appelle-la dans setup(). Intermédiaire

Afficher la solution
void logStart() {
  Serial.println("START");
}

void setup() { Serial.begin(9600); logStart(); } void loop() {}

Exercice 12 — Crée const int DELAI_MS = 250; et utilise delay(DELAI_MS) au lieu de delay(250). Intermédiaire

Afficher la solution
const int DELAI_MS = 250;

void setup() { Serial.begin(9600); } void loop() { Serial.println(“tick”); delay(DELAI_MS); }

Niveau avancé (débutant + rigueur)

Exercice 13 — Affiche millis() toutes les secondes (le nombre de millisecondes depuis le démarrage). Avancé

Afficher la solution
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println(millis());
  delay(1000);
}

Exercice 14 — Sans delay dans setup(), affiche READY après 3 secondes en utilisant millis() (indice : stocker l’instant de départ). Avancé

Afficher la solution
unsigned long t0 = 0;
bool affiche = false;

void setup() { Serial.begin(9600); t0 = millis(); }

void loop() { if (!affiche && (millis() - t0 >= 3000)) { Serial.println(“READY”); affiche = true; } }

Exercice 15 — Ajoute une constante const int PERIOD_MS = 200; et affiche . à cette cadence (avec delay, pour l’instant). Avancé

Afficher la solution
const int PERIOD_MS = 200;
void setup() { Serial.begin(9600); }
void loop() {
  Serial.print('.');
  delay(PERIOD_MS);
}

Exercice 16 — Écris une fonction void logValue(const char* nom, int v) qui affiche nom=v. Avancé

Afficher la solution
void logValue(const char* nom, int v) {
  Serial.print(nom);
  Serial.print('=');
  Serial.println(v);
}

void setup() { Serial.begin(9600); logValue(“score”, 42); } void loop() {}

Exercice 17 — Explique (dans un commentaire) la différence Serial.print vs Serial.println, puis montre les deux. Avancé

Afficher la solution
void setup() {
  Serial.begin(9600);
  // print : n'ajoute pas de retour à la ligne
  // println : ajoute un retour à la ligne à la fin
  Serial.print("A");
  Serial.print("B");
  Serial.println("C"); // ici, fin de ligne
}
void loop() {}

Exercice 18 — Affiche 0,1,2,3,4 sur une seule ligne séparés par des espaces. Avancé

Afficher la solution
void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 5; i++) {
    Serial.print(i);
    if (i < 4) Serial.print(' ');
  }
  Serial.println();
}
void loop() {}

Exercice 19 — Écris une fonction bool once() qui renvoie true la première fois puis false les fois suivantes (indice : variable statique). Avancé

Afficher la solution
bool once() {
  static bool first = true;
  if (first) {
    first = false;
    return true;
  }
  return false;
}

void setup() { Serial.begin(9600); }

void loop() { if (once()) Serial.println(“Une fois”); }

Exercice 20 — Écris un mini “journal” : au démarrage, affiche BOOT, puis en boucle affiche T= + millis() toutes les 500 ms. Avancé

Afficher la solution
void setup() {
  Serial.begin(9600);
  Serial.println("BOOT");
}

void loop() { Serial.print(“T=”); Serial.println(millis()); delay(500); }

Cette page vous a-t-elle été utile ?

Une question sur cet article ou besoin d'un conseil ? Posez-la ici

Vous hésitez entre deux modèles ou vous avez besoin d'aide sur un montage ? Écrivez-nous, nous vous répondons rapidement par e-mail.