Salut à tous !
Aujourd’hui épisode 3 de la série des screencasts arduino !
Pour cet épisode je parlerai du port série de l’arduino connu sous le nom de Serial.
Dans cet épisode :
– Présentation du port série et mise en garde sur son câblage et son utilisation,
– Explication rapide des divers fonction via un sketch tutoriel regroupant un peu tout,
– Initiation à la librairie NewSoftSerial (installation, utilisation),
– Exemple, projet tutoré de controleur de led via le port série.
Le sketch de tutoriel :
void setup(){ Serial.begin(9600); // on "allume" le port série et on le configure à la vitesse de 9600 bauds } void loop(){ Serial.print("AAAAA"); // envoie de chaine de caractères SANS retour à la ligne Serial.println("BBBBB"); // envoie de chaine de caractères AVEC retour à la ligne Serial.println('A'); // envoie d'un caractères simple avec retour à la ligne Serial.println(65, DEC); // envoie d'un nombre sous forme décimal Serial.println(65, HEX); // envoie d'un nombre sous sa forme hexadécimal Serial.println(65 , BYTE); // envoie d'un nombre entre 0 et 255 sous forme d'un byte (equivalent à Serial.write(65)) ) while(Serial.available() < 3); // attente d'au minimum 4 caractères disponible char cp = Serial.peek(); // on récupère le premier byte sans l'effacer de la mémoire char cr = Serial.read(); // on récupère le premier byte et on décale tout la mémoire d'un cran Serial.println(cp); // affichage Serial.println(cr); // affichage Serial.flush(); // on a recu 4 char mais on n'en utilise qu'un, avec flush on supprime les 3 char restant en mémoire while(1); // on bloque le programme }
Le sketch d’initiation à NewSoftSerial :
#include <NewSoftSerial.h> // on inclut la librairie NewSoftSerial NewSoftSerial test(7, 6); // on crée un port série virtuelle sur les broches D6 et D7 nommé "test" void setup() { Serial.begin(9600); test.begin(9600); // on "allume" et on configure le port série virtuelle test à la vitesse de 9600 bauds } void loop() { if(Serial.available() > 0){ Serial.println(Serial.read(), BYTE); } test.print('A'); delay(1000); }
Le résultat final du projet tutoré :
/* * Cahier des charges : * Commander trois led via le port série. * Les commandes seront de la forme A -> led 1 allumé, a -> led 1 éteinte, B -> led 2 et C -> led 3 */ void setup(){ Serial.begin(9600); // on "allume" le port série et on le configure à la vitesse de 9600 bauds pinMode(8, OUTPUT); // on place les trois broches des 3 leds en sortie. pinMode(9, OUTPUT); pinMode(10, OUTPUT); } void loop(){ if(Serial.available() > 0){ // si un octet a été recu sur le port série char cmd = Serial.read(); // on récupére cet octet switch(cmd){ // on faite un test de la valeur de cet octet case 'A': // si c'est un A digitalWrite(8, HIGH); // on allume la led 1 break; case 'a': // si c'est un a digitalWrite(8, LOW); // on éteint la led 1 break; case 'B': // si c'est un B digitalWrite(9, HIGH); // on allume la led 2 break; case 'b': // si c'est un b digitalWrite(9, LOW); // on éteint la led 2 break; case 'C': // si c'est un C digitalWrite(10, HIGH); // on allume la led 3 break; case 'c': // si c'est un c digitalWrite(10, LOW); // on éteint la led 3 break; } } }
Rappel important :
– Brancher un port série directement à un port RS-232 d’un ordinateur sans utiliser de MAX232 aura pour résultat de détruire ou endommager l’arduino.
– Bien penser à faire Serial(1, 2, 3).begin(xxxxxxx); avant d’utiliser un port série.
– Ne pas faire de pinMode ou digitalWrite sur les broches D0 et D1, ou l’arduino ne pourra plus être reprogrammer « facilement » (nécessite une procédure de déblocage).
Ps: je ne sait vraiment pas d’où vient l’espèce d’artefact vers la 6eme minute …
supers tutos! bien expliqués et bien illustrés! parfait! j attend les suivants avec impatience!
merci 🙂
Hi Skywodd,
La liaison série ne veut pas démarrer seule ! c’est à dire qu’il faut que le moniteur série soit à l’écran pour voir apparaitre le flux de données (allumage de la led tx sur uno) .j’aimerai quand même bien sur l’uno soit autonome, sans être branché en usb quoi !
Ne t’inquiète pas, même si le moniteur série est fermé ou que ta carte est sur batterie (par exemple) le programme continue de tourner.
Par contre si tu veut voir les données du port série il faut avoir le moniteur série d’ouvert (logique).
Le problème c’est que je veux relier 2 uno par le port serie: le uno recepteur marche très bien avec ton sketch, par contre le uno emetteur n’emet aucun signal série (le programme tourne c’est sur) sauf si on lance le moniteur série. Alors comment faire pour l’obliger à envoyer sur le port série?
Poste ton code sur le forum arduino 😉
http://arduino.cc/forum/index.php/board,33.0.html
Merci Skywodd ! mais je suis un gros nul ! je viens de trouver tout seul ! j’ai « seulement » interverti les RX et TX.
Encore merci pour ta disponibilité.