8 Novembre 2013

Arduino leçon 3 : Les chaines de caractères

Nous allons échanger des données entre Arduino et le PC avec le moniteur série.
Nous étudierons les chaines, la structure de boucle "WHILE" et la différence entre le code d'un caractère et son affichage.

pas FB

La chaîne

Une chaîne est un tableau de caractères.
On la déclare entre guillemets mais on peut adresser chaque caractère comme dans un tableau.
exemple :
              char[] machaine = "voici une chaine."

maintenant trouvez à quoi correspondent machaine[3] et machaine[9].


manipulation de chaîne

Quand on déclare une chaîne, il faut prévoir un caractère de plus car la chaîne se termine par un caractère "Null" c'est-à-dire un octet composé de 8 zéros.
exemple :
      String machaine = "voici une chaine."       // réserve 18 adresses de mémoire.

machaine[0] renvoie le code correspondant à la lettre v.
machaine[16] renvoie le code correspondant au point.
machaine[17] renvoie un caractère Null.
machaine[18] provoque une erreur lors de la compilation.


Le moniteur série

Il s'agit d'une fenêtre sur votre écran qui permet d'envoyer des données au programme et d'en recevoir.

On l'ouvre par le menu Tool/Serial Monitor ou par ce bouton bouton moniteur

Quand vous avez écrit vos données, vous les envoyez au montage avec le bouton "Send" ou la touche "Entrée".

fenêtre moniteur

On ne peut effacer cette fenêtre qu'en la fermant et la rouvrant. Il n'existe pas une fonction Clear.

instructions concernant le moniteur série

Serial.begin(9600);
      Cette instruction initie la communication; elle n'est exécutée qu'une fois. On la met donc dans le setup();
Serial.print();
      envoie une chaîne dans le moniteur.
Serial.println();
      envoie une chaine + un retour à la ligne

La lecture est un peu plus compliquée. Il faut d'abord vérifier si des données ont été envoyées par le moniteur et si c'est le cas, on récupère chaque octet et on le stocke dans une chaîne, c'est-à-dire dans un tableau d'octets.
Serial.available()
      nous indique le nombre d'octets présents en entrée.
Serial.read()
      lit un octet (1 seul à la fois).
Il faudra répéter cette instruction pour obtenir tous les octets.

Fonctions de lecture

Serial.available et Serial.read sont des fonctions qui renvoient des valeurs. On ne les a pas déclarées nous-mêmes car elles sont incluses dans Arduino, mais on doit penser qu'elles ont été déclarées ainsi :
      int Serial.available();       // renvoie le nombre de caractères en attente
      char Serial.read();           // renvoie le 1er caractère de la file d'attente
contrairement à toutes les fonctions rencontrées précédemment qui étaient "void", car elles ne renvoyaient rien.


la structure WHILE (tant que...)

il s'agit d'une boucle à répéter tant qu'une condition est remplie.
TANT QUE (on a des octets à lire) { le traitement est encadré par des accolades }

ce qui donne en langage Arduino :

String recu;
int i=0 ;
WHILE ( Serial.available()>0 )      {
      recu[i] = Serial.read();
      i++;
      delay(100);
}

ensuite, on regarde la valeur de i
si on n'a rien reçu, i est resté à 0 et on continue la boucle.
si i>0 on traite le message reçu.

if ( i>0 ) {
      // traitement du message reçu
}

1er programme : on répète ce qu'on a reçu

            /* Moniteur-série
lit un message et annonce qu'il l'a reçu
*/
char recu[20];
String reponse;
int i;

void setup(){
      Serial.begin(9600);
      }

void loop() {
      reponse = "On a recu ";
      i = 0 ;
      while ( Serial.available()>0 )      {
            recu[i] = Serial.read();
            reponse += recu[i];
            i++;
            delay(100);
      }
      if (i>0) {
            Serial.println(reponse + ".");
      }
}


lecture de caractères

L'entrée d'un caractère à la suite du précédent n'est pas immédiate.
Pour cette raison, on a inclus un délai d'un 10° de seconde dans la boucle de lecture.

programme source et programme objet

langage machine
Un microprocesseur ne comprend que le langage binaire qui est une suite de 0 et de 1. C'est vrai aussi bien pour la puce contenue dans Arduino que pour tous les autres systèmes.
programme source
C'est celui que vous écrivez, avec des mots anglais, dans la fenêtre Arduino et que vous sauvegardez sur votre disque.
compilateur
C'est un programme que vous appelez par le 1er bouton d'Arduino.
Il vérifie que votre programme est correct et le traduit en langage machine.
Le 2ème bouton fait le même travail puis transfère ce programme objet dans la mémoire de la carte Arduino.
programme objet
C'est le programme en langage machine provenant de la compilation et transféré sur la plaquette Arduino.

Le programme source reste sur le PC. Il n'est jamais sur la plaquette Arduino.
Le programme objet peut s'exécuter sans PC si on alimente la plaquette par une pile ou un transfo sauf si on veut utiliser le moniteur série.

char et byte

byte i;       // réserve un octet en mémoire
char j;       // réserve un octet en mémoire
int k ;       // réserve 2 octets en mémoire
Pour les calculs, i j et k seront traités exactement de la même manière.
C'est pour l'affichage qu'on aura une différence.

i=65;
j=65;
k=65;
les octets réservés reçoivent chacun la valeur 65 c'est à dire en binaire 0100 0001.
Serial.print (i) ; // affiche 65
Serial.print (j) ; // affiche la lettre A
Serial.print (k) ; // affiche 65

Dans le 1er cas on affiche un nombre, dans le second un caractère.
C'est la fonction Serial.print qui s'occupe du choix en regardant la définition de la variable.
lisez cette page d'explications sur le code ASCII.




Recherche de matériel sur eBay.

sélection des options

options eBay

Sur la page d'accueil du site, on indique un thème de recherche (par exemple Arduino).
Ensuite, on afine la recherche dans la colonne de gauche :
      - on peut se limiter à "achat immédiat" pour éviter les attentes des enchères
      - on choisira "monde entier" pour profiter des prix chinois.
      - on peut aussi choisir "livraison gratuite" pour éviter de calculer le total
     
Quand vous avez repéré un article qui vous intéresse, vous cliquez pour ouvrir sa page (avec la molette de la souris ou avec le bouton gauche et la touche controle pour ne pas perdre la page en cours).
A gauche de la page, le vendeur vous propose de visiter sa boutique. Faites le en cliquant sur le lien.

Funduino

dans la boutique d'un vendeur

On vous propose des milliers d'articles. Ne perdez pas de temps à tous les regarder. Faites une sélection d'objets (par exemple Arduino) et refaites une sélection pour chaque objet que vous recherchez (breadboard, fils...)
notez sur un papier le prix de chaque article et faites le même travail pour la boutique d'un autre vendeur.
Quand vous avez trouvé un vendeur qui a tout ce qui vous intéresse à un prix intéressant, passez votre commande.
Après chaque article et avant de le payer, choisissez "visiter la boutique du vendeur" pour ajouter l'objet suivant.
Et payez à la fin après avoir ajouté le dernier article.

Paypal

C'est un service bancaire qui appartient à eBay. Ça ne coûte rien à l'acheteur. Je l'utilise depuis 7 ou 8 ans et le trouve très pratique. J'ai donné 1 seule fois mon numéro de carte bleue à Paypal (+ 1 autre fois quand ma carte a été renouvelée), et il gère le transfert d'argent sans communiquer notre numéro au vendeur. Que le vendeur veuille des euros ou des en dollars, payPal s'en charge.

Autres sites

Autres sites

eBay n'est pas le seul site asiatique à vendre du matériel.
Vous pouvez aussi regarder par exemple mini in the box ou tinydeal ou dealExtrem.
Une mention spéciale pour AliExpress. Les articles y sont souvent moins cher que sur eBay, mais attention au port gratuit (Free Shipping) annoncé pour certains articles. Il n'est souvent valable que pour un seul article à la fois. Si vous commandez plusieurs articles identiques, vérifiez bien qu'on ne vous ajoute pas des frais. Si c'est le cas, commandez le second une heure plus tard.




La notation abrégée

Quand on ajoute une valeur à une variable, on peut l'écrire de 2 manières :
      a = a + 2 peut s'écrire a += 2
      a = a - 3 peut s'écrire a -= 3
      a = a / 4 peut s'écrire a /= 4 (on aura dans les 2 cas le quotient entier)
      a = a * 5 peut s'écrire a *= 5

Quand la valeur à ajouter ou soustraire est 1, on écrit ainsi :
      a++ pour avoir a+1
      a-- pour avoir a-1






haut de la page
flèche gauche Page Précédente : la structure for() et les tableaux           Page Suivante: le switch flèche droite

Valid XHTML 1.0 Transitional