lundi 18 août 2014

Tuto#3 Arduino: Communiquez votre carte avec...!

Domaine: Systèmes embarqués
Difficulté: Intermédiaire

Introduction

Hello Hello! :D ça c'est le troisième tuto pour le même sujet. La carte Arduino. 
Ici on va apprendre comment on communique une carte à un matériel et échanger les données entre-eux. Ce matériel peut être un ordinateur, un autre microcontrôleur, ou n'importe quel autre matériel.
Un peu de concentration maintenant! Allons-y :D :D

La communication série

Le type de communication qui nous intéresse dans ce tuto est appelé Communication en série. On lui a attribué ce nom non pas parce que l'Arduino et le matériel à connecter sont montés en série mais parce que les données sont envoyées bit par bit et donc en série.
Si on suppose que ce matériel est un ordinateur, on aura besoin d'un câble USB. En effet, dans ce cas, le câble va servir pour alimenter la carte et aussi pour la faire communiquer au pc.
Par contre s'il s'agit d'une liaison entre deux cartes Arduino, vous n'avez qu'à relier les deux masses et brancher les broches TX et RX des deux cartes ensemble et ceci de la manière suivante. La broche TX de la première carte liée à la broche RX de la deuxième carte et vice-versa.
Maintenant si vous voulez relier l'Arduino avec un autre microcontrôleur vous allez refaire la même démarche précédente.

La transmission des données

Préparation de la liaison
Notre rôle ici, c'est d'établir une connexion entre la carte Arduino et l'ordinateur pour échanger des données entre-eux. 
La première étape à suivre est du coté de l'ordinateur, lancez votre IDE et cliquez sur le bouton suivant.

Le terminal série s'ouvre alors:


Envoie des données de la carte vers l'ordinateur

Dans cette fenêtre vous allez envoyer vos messages vers l'Arduino et recevoir les données que la carte vous a envoyées. 
Laissez cette fenêtre ouverte et passez à la programmation! Vous allez tout d'abord: 
  • Ouvrir une liaison entre la carte et le pc.
  • Envoyer les données de la carte vers le pc                                                                                

Pour ouvrir la communication "série" on doit avant tout créer l'objet Serial. Cet objet qui existe déjà dans l'Arduino doit être obligatoirement créé pour assurer une liaison série entre la carte et l'ordinateur. 
Dans la partie setup() de votre code vous allez initialiser la communication série et vous devez indiquer aussi la vitesse de communication.
begin() est une fonction de l'objet Seriel qui sert à initialiser l'objet et à établir la communication. Cette fonction prend en paramètre la vitesse de la liaison estimé ici à 9600 bauds. 
Pour envoyer les données maintenant, on va écrire dans l'objet serial.
La fonction à utiliser est print() ou println() si vous voulez revenir à la ligne.


Et voilà! Maintenant vous savez comment envoyer des données de la carte à l'ordinateur! Vous n'avez pas de problème la dessus tout est simple jusque là! Vous n'avez qu'à ouvrir le terminal série, initialiser l'objet Serial et écrire le message que vous voulez envoyer.

Réception des données depuis l'ordinateur

Cette étape est un tout petit peu compliquée par rapport à la précédente.
On doit vérifier à chaque fois l’existence des données à recevoir. En effet, la carte dispose d'une fil d'attente qu'on appelle Buffer de réception. Cellei-ci contient les éléments que nous désirons envoyer à la carte.
Il existe aussi un autre Buffer d'envoi qui contient les éléments que nous voulons envoyer vers l'ordinateur.

On va donc vérifier régulièrement si les données existent dans le buffer. Et là! deux méthodes existent soit avec la fonction available() soit avec la fonction read(). On commence par la premiére méthode.
Tapez donc ces lignes de code dans la partie loop().

available() est une fonction de l'objet Serial qui renvoie -1 si le buffer est vide.
Maintenant qu'on est sur que le buffer contient au moins une donnée on va passer à la lecture de ces données avec la fonction read().
Par contre vous pouvez passer directement à la lecture avec read() qui renvoie -1 si le buffer est vide et donc inutile d'utiliser available().

Supprimez ce que vous avez écrit précédemment et écrivez ces lignes là.


Maintenant vous connaissez deux méthodes pour vérifier la présence des données.
Très bien! On va utiliser la troisième méthode!  :p

Arduino nous a facilité ce test et nous a rajouté une fonction qui s'exécute régulièrement avant  chaque redémarrage de la loop. C'est la fonction serialEvent(). 
Cette fonction va être rajoutée après les fonctions setup() et loop().
Voilà un exemple pour comprendre cette méthode.


On a branché une LED dans la broche 11 et on a initialisé son état "HIGH" elle est donc éteinte. et on a initialisé la liaison série avec une vitesse égale à 9600 bauds.
Aprés on va vérifier s'il y'a des données en attente, dans ce cas on va allumer notre LED.
Tant que la LED est allumée soyez sur que le buffer de l'Arduino contient des données à envoyer.

Je vous invite maintenant à essayer cet exemple.


Voilà! je sais que le tuto est un peu ennuyant, mais il est très important! Si vous désirez travailler encore sur des projets intéressants de domotique ou de robotique par exemple vous devez savoir comment établir une liaison série et ce travail va vous apparaître banal après :p

Concernant la source, je ne vais pas la mentionner cette fois :p  Cherchez-la dans les imprimes écran xD!

Allez! Je vous laisse maintenant, on se voit bientôt dans un autre tuto plus amusant que celui-là :p 

Aucun commentaire:

Enregistrer un commentaire