Débogage

Sur un système embarqué, il est difficile de connaître l’état d’avancement du programme puisque, par défaut, il ne possède pas d’écran de visualisation.
Pour remédier à ceci, il existe (au moins) deux solutions :

  • utiliser une broche de sortie, connectée à un oscilloscope par exemple (voir tutoriel Entrées / Sorties Numériques)
  • utiliser la liaison série et un moniteur série

Liaison Série

La liaison série de type RS232 peut être utilisée pour transmettre des informations depuis la carte vers l’ordinateur ou inversement. Dans le cas de la carte Arduino Uno, elle est “simulée” et passe par la liaison USB. On peut par exemple l’utiliser pour afficher des messages de débogage depuis la carte vers l’ordinateur.

Elle permet de transmettre une information sur 8 bits de manière asynchrone.

Initialisation de la liaison

Afin de faire fonctionner cette liaison série, il faut l’initialiser à l’aide de la fonction suivante :

Serial.begin(int [baud]);

Le paramètre baud correspond à la vitesse de transmission entre la carte et le PC. Cette liaison étant asynchrone, il faut que ce paramètre soit le même pour l’émetteur et le récepteur. Il s’exprime en bauds (nombre de symboles par seconde).
La valeur par défaut est de 9600 bauds. La carte Arduino peut monter jusqu’à une cadence de 115200 bauds.

Par exemple, si on souhaite initialiser la liaison à 18400 bauds, il suffira d’écrire :

Serial.begin(18400);

Moniteur Série

Le logiciel Arduino est équipé d’un moniteur série, qui permet de recevoir et envoyer des informations sur une liaison de type RS232/Série.

On le trouve dans le menu Outils / Moniteur Série.

Une nouvelle fenêtre s’ouvre.

Elle permet d’afficher les informations reçues sur la liaison Série et d’en envoyer.
On peut spécifier alors la vitesse de transmission en bauds (en bas à droite).

Envoi/Réception de données

Grâce à cette méthode, il est possible d’envoyer ou de recevoir des données entre le PC et la carte Arduino.

Envoi de données depuis la carte Arduino

On peut envoyer différents types d’informations par cette liaison.

Si l’on souhaite envoyer une chaîne de caractères, sans saut de ligne à la fin :

Serial.print("Bonjour");

Si l’on souhaite envoyer une chaîne de caractères, avec saut de ligne à la fin :

Serial.println("Bonjour");

Si l’on souhaite envoyer la valeur d’une variable, sans saut de ligne à la fin :

int a = 3;
Serial.print(a);

Réception d’un caractère depuis la carte Arduino

On peut également recevoir des caractères depuis le carte provenant du PC.

Cette liaison étant asynchrone, des données peuvent arrivées à tout moment. Afin de savoir si des données sont présentes dans la mémoire de cette liaison, il faut utiliser la fonction Serial.available(). Cette fonction renvoie le nombre de mémoires utilisées (ie le nombre de caractères reçus).

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

   Serial.print("Caractere recu : ");
   Serial.println(c);
}

Dans l’exemple précédent, on vérifie si au moins une donnée est disponible (fonction Serial.available()) puis on lit la première donnée (fonction Serial.read()) qu’on stocke dans la variable c. Ensuite, on affiche un message du type : “Caractere recu : k” (si la lettre k a été saisie dans le moniteur série et envoyée sur la liaison à la carte).

Remarque

On peut utiliser ce principe pour transmettre des commandes d’un PC à une carte de type Arduino, pour piloter à distance un système.

Arduino – Moniteur Série / Débogage