Réception des données

(Envoi de données de l’Arduino

vers le moniteur série)



. La fonction Serial.print()

Maintenant que la liaison série est établie, il est possible d’envoyer des données depuis la carte Arduino vers le moniteur série avec la fonction ”print()”  de la classe ”Serial”.

On peut envoyer différents types d’informations :

. Envoie d’une chaîne de caractères, sans saut de ligne à la fin : Serial.print(”Test”);

. Envoie d’une chaîne de caractères, avec saut de ligne à la fin : Serial.println(”Test”);

. Envoie de la valeur d’une variable, sans saut de ligne à la fin : 

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

 

Exemple d’application d’envoi de données de l’Arduino vers le moniteur série :

Voici un circuit qui servira de support à tous les exemples d’application de ce document sur la communication avec un Arduino.

Il composé d’une DEL RVB dont les DELs rouge, verte et bleue sont respectivement connectés aux sorties, 11, 9 et 10 de l’Arduino (les DELs sont protégées par des résistance de 220 Ω) et d’un potentiomètre, dont le « point milieu » est relié à l’entrée analogique A0 du microcontrôleur :

 

Le programme suivant, qui sera téléversé dans la mémoire de l’Arduino, affiche la valeur de l’entrée analogique A0 dans le moniteur série (valeur entre 0 et 1023 en fonction de la position du ”point milieu” du potentiomètre).
Les données ne sont envoyées que si la valeur lue est différente de la précédente (écart de plus de 2 unités entre les valeurs lues) :

Et le résultat dans le moniteur série :

 

. La fonction Serial.write()


Il est également possible d’utiliser la fonction ”Serial.write()”, pour envoyer des données sur la liaison série.
Si dans le cas de l’envoi de chaines de caractères, il n’y a pas de différence avec la fonction ”Serial.print()”, l’envoi de nombres décimaux ou hexadécimaux ne donnent pas le même résultat suivant la fonction utilisée, comme le montre le code suivant :

Résultats dans le moniteur série :

 

La fonction ”Serial.print()” affiche bien les valeurs des variables N et N2 (0x45 en hexadécimal est égal à 69 en décimal) car ces variables sont envoyées comme des chaines de caractères, chaque caractère étant codé selon le code ASCII.

La fonction ”Serial.write()”, elle, écrit des données binaires sur le port série. Ces données sont envoyées comme une série d’octets.

Si les données à transmettre sont des chaines de caractères, les données binaires transmises sont les codes ASCII des caractères. Mais dans le cas de nombre, les données envoyées sont le résultat de la conversion en binaire de ces nombres.

Ainsi la variable N est transmise sous la forme : 00110001 (49 en décimal) qui est le code ASCII du chiffre ”1” (1 est donc affiché), et la variable N2 sous la forme : 01000101 (69 en décimal ou 0x45 en hexadécimal), soit le code ASCII de la lettre ”E” (E est donc affiché).