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!
Publié par seb2320 | 28 Mai 2012, 13 h 24 minmerci 🙂
Publié par skywodd | 28 Mai 2012, 14 h 32 minHi 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 !
Publié par Nico | 6 Mai 2013, 21 h 22 minNe 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).
Publié par skywodd | 7 Mai 2013, 10 h 16 minLe 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?
Publié par nico | 9 Mai 2013, 10 h 15 minPoste ton code sur le forum arduino 😉
http://arduino.cc/forum/index.php/board,33.0.html
Publié par skywodd | 9 Mai 2013, 17 h 26 minMerci 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é.
Publié par nico | 9 Mai 2013, 20 h 02 min