Skyduino:~#
Articles
arduino, programmation, tutoriel

Screencast Arduino – épisode 3 – Serial

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é :

Cablage réalisé sous fritzing

/*
 * 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 …

Discussion

7 réflexions sur “Screencast Arduino – épisode 3 – Serial

  1. 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 min
  2. 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 !

    Publié par Nico | 6 Mai 2013, 21 h 22 min
    • 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).

      Publié par skywodd | 7 Mai 2013, 10 h 16 min
      • 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?

        Publié par nico | 9 Mai 2013, 10 h 15 min
      • Poste 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 min
      • 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é.

        Publié par nico | 9 Mai 2013, 20 h 02 min

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.