Bibliothèque Serial

. Par : Dominique, Guillaume, Jean-Luc. URL : https://www.locoduino.org/spip.php?article67

Explications

Bibliothèque officielle faisant partie de l’IDE Arduino, elle facilite l’écriture du code pour communiquer avec un autre Arduino ou un ordinateur.
Nous allons donc voir les différentes commandes de cette bibliothèque. Nous n’allons pas ici mettre en pratique ces commandes, ce sera le sujet d’autres articles.

Installation

Cette bibliothèque fait donc partie intégrante de l’outil de développement ’Arduino, elle est installée de base. Il suffit juste de l’importer dans le programme que l’on écrit.

Rappel

La voie série est une des possibilités de dialogue entre un Arduino et un autre périphérique, que ce soit un autre Arduino, un micro-contrôleur ou un ordinateur.
Attention, des précautions sont à prendre comme :

  • utiliser le même niveau de voltage pour la communication entre deux périphériques
  • bien brancher les fils entre deux Arduino ou avec un autre périphérique
  • que ce soit entre deux Arduino (avec la voie série 1) ou avec un PC, l’utilisation de la voie série rend les broches digitales 0 et 1 (respectivement Tx et Rx) inopérants. Elles ne peuvent plus être utilisées comme entrées ou sorties digitales.

Il existe aussi selon les Arduino une ou plusieurs voies séries. Cela sera visible dans chaque article carte Arduino.

Importer la bibliothèque

Cela se fait automatiquement dès lors qu’une commande utilisant Serial est introduite dans le code.

Les différents codes et fonctions

Le code fonctionne majoritairement en deux parties : la première désigne la voie série car selon les Arduino, il peut en exister plusieurs, et un point sépare la première de la seconde partie qui est la fonction appelée : Serial.begin(9600);

Les commandes suivantes s’appliqueront donc à la voie série qui s’utilise ou alors avec un ordinateur et le terminal ou un autre Arduino avec les broches 0 et 1.

Ouvrir la voie série

Ce code initialise la voie série et définit la vitesse de transmission des données. Cette vitesse doit être la même sur chaque périphérique notamment entre l’Arduino et la console de l’IDE Arduino, afin en quelque sorte que chaque périphérique parle la même langue.

Serial.begin(taux);

Ce code est à placer dans le setup. La vitesse peut être de 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, ou 115200.

Présence de données sur la voie série

Savoir si il y a des données présentes sur la voie série permet d’optimiser le code. En effet, la lecture des données sera effectuée qu’il y ait ou non des données. Si il n’y a pas de données, on perd un temps qui peut être précieux selon le type de programme qu’utilise l’Arduino.
Il y a donc une fonction qui permet de savoir si des données sont ou non présentes.

Serial.available()

’available()’ renvoie le nombre de bytes qu’il y a à lire sur la voie série. Plus précisément, chaque donnée qui arrive de la voie série est stockée dans le tampon qui peut contenir 64 octets.
Il suffira simplement simplement de coupler cette fonction à un test et une comparaison stricte par rapport à 0 pour entraîner ou non des actions selon la présence de données.

.print() et .println() ou comment afficher sur le terminal de l’IDE Arduino
Ces fonctions permettent de faire parler l’Arduino sur votre ordinateur.
Dans l’exemple suivant, on déclare une constante VERSION de type texte, qui sera mise à jour à chaque évolution du programme. Pour se souvenir de cette version, il est pratique d’afficher celle-ci sur le terminal de l’IDE au démarrage (Setup) du programme :

#define VERSION "Version 1.0 du 26/01/2016 de Mon_Truc"

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println(VERSION); 
}

void loop() {
  // reste du programme
}

.write()
Tout comme les fonctions précédentes, elle permet d’écrire sur la voie série en envoyant des données ou des chaînes de caractères sur le même principe : si valeur d’une variable à transmettre, nous mettons le nom de la variable entre les parenthèses. Dans le cas d’une chaîne de caractères (string), nous mettons la chaîne entre guillemets dans les parenthèses.
La différence que nous retrouvons avec les précédentes fonction est que celle-ci renvoie le nombre d’octets qu’elle a transmis sur la voie série, c’est-à-dire la longueur de la chaîne.

int a = Serial.write("la longueur de la chaîne est 31");
et a sera égal à 31, le zéro de fin de chaîne n’est pas compté.

.flush()
Cette fonction permet au programme d’attendre que la totalité des données à envoyer sur la voie série sont bien parties.
Elle n’est pas souvent utilisée, mais comme l’envoi des données série se fait en tâche de fond, il y a une mémoire tampon qui pourrait se saturer si le programme transmet trop de données à la fois. Plutôt que d’utiliser l’instruction delay() qui provoquerait des pertes de temps inutiles, il vaut mieux utiliser flush().

Serial.flush();
Elle n’a pas besoin de paramètres.

Fonctions peu usitées

Serial.end()
Comme la fonction le dit, elle permet de fermer une voie série afin de permettre l’utilisation des broches comme entrées ou sorties digitales.
Serial.end();
Cette fonction n’a pas besoin de paramètres

(Serial)
Cette variable retourne True si la voie série est disponible. Elle est surtout utilisée dans le cadre de l’utilisation d’un Arduino Leonardo pour savoir si la voie série est disponible après ouverture afin que le programme continue son exécution correctement.

void setup() {
  Serial.begin(9600);
  while (!Serial) {
//reste dans cette boucle tant que la voie série est non disponible
  }
}

void loop() {
  Suite du programme
} 

Bien souvent il est nécessaire d’utiliser d’autres broches que les broches 0 et 1 et aussi, parfois, plusieurs liaisons série sont nécessaires, par exemple pour conserver la fonction de communication avec le terminal de l’IDE aux fins de mise au point.

Dans ce cas nous nous reporterons à l’article Bibliothèque SoftWare Serial.