← Retour au chapitre

Étape 2 / 3

Exo 11 : Parle-moi — Serial Monitor

Serial.begin, print, read, available — contrôler des LEDs par texte.

Chapitres précédents non terminés
Pour un apprentissage optimal, termine d'abord : PWM : varier l'intensité

Le Serial Monitor : parler à l'Arduino

Le Serial Monitor est un outil intégré à l'IDE Arduino qui permet de communiquer avec la carte via le câble USB. C'est un peu comme un chat : l'Arduino peut t'envoyer des messages, et tu peux lui en envoyer aussi.

C'est l'outil de debug n°1 en Arduino. Pas d'écran, pas de console.log — le Serial Monitor est ta fenêtre sur ce qui se passe dans le microcontrôleur.

Pour l'ouvrir dans l'IDE Arduino : menu Outils → Moniteur série, ou le raccourci Ctrl+Maj+M. Vérifie que le baudrate en bas à droite correspond à celui du code (9600).

UART (Universal Asynchronous Receiver/Transmitter) est le protocole de communication série utilisé. Le débit se mesure en bauds (symboles par seconde — en Arduino, ça équivaut à des bits/seconde). On utilise presque toujours 9600 bauds pour débuter.

Les 4 fonctions à connaître

Serial.begin(9600)

Ouvre la connexion série à 9600 bauds. À mettre dans setup(). Sans ça, rien ne fonctionne.

Serial.print() / println()

Envoie du texte vers le PC. print reste sur la même ligne, println ajoute un retour à la ligne.

Serial.available()

Vérifie si des données arrivent du PC. Retourne le nombre de bytes en attente dans le buffer.

Serial.read()

Lit un byte (un caractère) depuis le buffer. Retourne -1 si le buffer est vide.

Étape 1 : Arduino → PC (envoyer)

Le cas d'usage le plus simple : afficher des valeurs pour débugger. L'Arduino envoie le temps écoulé chaque seconde.

void setup() {
  Serial.begin(9600);  // Ouvrir la connexion à 9600 bauds
  Serial.println("Arduino prêt !");
}

void loop() {
  Serial.print("Temps : ");
  Serial.print(millis());
  Serial.println(" ms");
  delay(1000);
}

Astuce : Serial.print() peut afficher des int, des float, des String... C'est le couteau suisse du debug. Utilise-le pour vérifier les valeurs de tes capteurs !

Étape 2 : PC → Arduino (recevoir)

Maintenant, on lit ce que l'utilisateur tape dans le Serial Monitor. Le pattern est toujours le même : vérifier si des données sont disponibles, puis les lire caractère par caractère.

void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  Serial.println("Envoie 1 pour allumer, 0 pour éteindre");
}

void loop() {
  if (Serial.available() > 0) {
    char c = Serial.read();

    if (c == '1') {
      digitalWrite(8, HIGH);
      Serial.println("LED allumée");
    }
    else if (c == '0') {
      digitalWrite(8, LOW);
      Serial.println("LED éteinte");
    }
  }
}

Le pattern :if (Serial.available() > 0)char c = Serial.read() → traitement avec if/else ou switch.

Simulateur : Serial Monitor

Essaie les commandes pour contrôler les LEDs simulées : r (rouge), g (vert), b (bleu), 1 / on (tout allumer), 0 / off (tout éteindre).

RRouge
GVerte
BBleue
Serial Monitor ouvert (9600 bauds)

Code complet : contrôle multi-LED par Serial

Le switch est plus propre que des if/else en chaîne quand on compare un caractère à plusieurs valeurs possibles.

void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);  // Rouge
  pinMode(9, OUTPUT);  // Vert
  pinMode(10, OUTPUT); // Bleu
  Serial.println("Commandes : r/g/b pour toggle, 1=tout ON, 0=tout OFF");
}

bool ledR = false, ledG = false, ledB = false;

void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    switch (c) {
      case 'r': ledR = !ledR; break;
      case 'g': ledG = !ledG; break;
      case 'b': ledB = !ledB; break;
      case '1': ledR = ledG = ledB = true;  break;
      case '0': ledR = ledG = ledB = false; break;
    }
    digitalWrite(8, ledR);
    digitalWrite(9, ledG);
    digitalWrite(10, ledB);
  }
}

Montage : ce code utilise 3 LEDs sur les pins D8, D9 et D10. Tu monteras ce circuit en détail dans la section Synthèse juste après, avec schéma et montage pas à pas.

Exercice : complète le Serial

Remplis les trous pour recevoir une commande série :

1. À quelle vitesse ouvrir la connexion série ?

Serial.begin( );

2. Quelle fonction vérifie si des données sont reçues ?

if (Serial.() > 0) {

3. Quelle fonction lit un caractère depuis le buffer ?

  char c = Serial.();

Défis bonus

📊 Défi : Debug capteur

Connecte un potentiomètre sur A0 et affiche sa valeur dans le Serial Monitor avec Serial.println(analogRead(A0)). Ouvre le Serial Plotter pour voir la courbe en temps réel !

🔢 Défi : PWM par Serial

Envoie un nombre entre 0 et 255 pour contrôler la luminosité d'une LED PWM. Utilise Serial.parseInt() pour lire un nombre entier.

À retenir

  • Serial.begin(9600) dans setup() est obligatoire avant toute communication série.
  • Serial.print() / println() envoie du texte de l'Arduino vers le PC — c'est le console.log() d'Arduino.
  • Le pattern pour recevoir : if (Serial.available()) { char c = Serial.read(); }
  • Le Serial Monitor est l'outil de debug essentiel — affiche tes variables pour comprendre ce qui se passe.

Valide cette étape quand tu as terminé la lecture et la manipulation.

← Exo 10 : Multitâche — millis() vs delay()Synthèse : LED + Serial + timing →

Electro-Lab - support pédagogique Arduino (MVP).

IFOSUP Wavre - Cours Drones et Robotique.