Académique Documents
Professionnel Documents
Culture Documents
Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IX
1 Communications srie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
1.2
10
1.3
13
1.4
18
23
1.6
27
1.7
31
1.8
33
1.9
35
1.10
39
1.11
43
1.12
48
1.13
51
1.14
54
59
61
64
1.5
1.15
2.1
2.2
66
2.3
71
2.4
74
2.5
76
2.6
78
3 Capteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
3.1
Dtection de mouvement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
3.2
Dtection de lumire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
3.3
87
3.4
Mesurer la distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
3.5
93
3.6
Dtecter un son . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
3.7
100
3.8
103
3.9
106
3.10
108
3.11
111
3.12
Dtection de la direction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115
3.13
120
127
4.2
130
4.3
131
134
4.4
IV
5.1
142
5.2
5.3
145
5.4
146
5.5
149
5.6
155
5.7
157
163
6.2
165
6.3
167
6.4
169
6.5
172
6.6
175
6.7
178
182
7.2
185
7.3
188
7.4
191
8 Afficheurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
8.1
196
8.2
198
8.3
200
8.4
203
8.5
205
8.6
207
8.7
210
8.8
212
215
9.2
216
9.3
220
9.4
222
9.5
230
239
10.2
243
10.3
248
10.4
250
10.5
255
10.6
257
261
11.2
266
11.3
269
11.4
275
283
12.2
286
12.3
289
12.4
295
301
13.2
303
13.3
304
13.4
308
13.5
315
VI
14.1
323
14.2
325
14.3
14.4
331
14.5
333
14.6
334
341
15.2
344
15.3
347
15.4
350
15.5
353
15.6
356
15.7
358
15.8
360
15.9
363
364
366
Annexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
A. Composants lectroniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
371
374
380
383
386
388
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
VII
AVANT-PROPOS
Cet ouvrage a t crit avec laide de Nick Weldin pour vous aider explorer toutes
les choses tonnantes que vous pouvez faire avec Arduino.
Arduino est une famille de microcontrleurs (petits ordinateurs) et un environnement
de cration logicielle qui facilite lcriture de programmes (que lon appelle sketchs)
pouvant interagir avec le monde physique. Les choses que vous pouvez raliser
avec Arduino peuvent sentir et ragir au toucher, au son, la position, la chaleur
et la lumire. Ce type de technologie, que lon dsigne souvent sous le nom
dinformatique physique, est utilis dans toutes sortes dappareils, de liPhone aux
systmes lectroniques automobiles. Arduino permet toute personne motive
(mme les gens sans exprience de la programmation ni de llectronique) dutiliser
cette technologie riche et complexe.
plus complexes en vous montrant comment rsoudre des problmes et utiliser des
fonctionnalits qui vous sont peut-tre nouvelles.
Les programmeurs C et C++ expriments trouveront des exemples dutilisation des
ressources bas niveau de lAVR (interruptions, timers, I2C, Ethernet, etc.) afin de
crer des applications qui se servent de lenvironnement Arduino.
Organisation de cet ouvrage
Ce livre contient des informations qui couvrent une large palette des fonctionnalits
de lArduino, des tches courantes1 aux technologies les plus avances. Chaque
technique est explique dans une recette qui montre comment implmenter une
fonctionnalit spcifique. Vous navez pas besoin de lire tout le contenu de louvrage
la suite. Quand une recette utilise une technique traite dans une autre recette, il y
a une rfrence au contenu de cette recette plutt que de rpter les dtails de cette
recette en de multiples endroits.
Le chapitre 1, Communications srie, dcrit la manire de connecter lArduino
pour quil communique avec votre ordinateur et dautres appareils. La liaison srie
est la mthode la plus courante pour les entres et les sorties de lArduino, et cette
fonctionnalit est utilise dans de nombreuses recettes de ce livre.
Le chapitre 2, Entres simples analogiques et numriques, introduit toute une
srie de techniques pour lire des signaux numriques et analogiques.
Le chapitre 3, Capteurs, fournit des recettes qui expliquent comment utiliser des
priphriques qui permettent lArduino de sentir le toucher, le son, la position, la
chaleur et la lumire.
Le chapitre 4, Sortie visuelle, traite du contrle de la lumire. Les recettes tudient
lallumage dune ou plusieurs LED, ainsi que le contrle de lclat et de la couleur.
Ce chapitre explique comment vous pouvez piloter des affichages LED, et crer
des motifs et des animations avec des matrices de LED. En outre, ce chapitre fournit
une introduction gnrale aux sorties numriques et analogiques.
Le chapitre 5, Sortie physique, explique comment vous pouvez faire dplacer
des objets en contrlant des moteurs (servomoteurs, moteurs en courant continu,
moteurs pas--pas) avec lArduino.
Le chapitre 6, Sortie audio, montre comment gnrer du son avec lArduino via un
priphrique de sortie comme un haut-parleur. Vous apprendrez jouer des notes
et des mlodies simples, et lire des fichiers WAV et MIDI.
Le chapitre 7, Contrle distant dappareils externes, dcrit des techniques qui
permettent de communiquer avec presque tout appareil utilisant une forme de
1. NDE : Si vous dbutez avec Arduino nous vous conseillons la lecture des ouvrages suivants :
Pour dmarrer avec Arduino, M. Banzi, 2e dition, 120 pages, Dunod, 2013.
Arduino - Matrisez sa programmation et ses cartes dinterface, C. Tavernier, Dunod, 2011.
Arduino Applications avances, C. Tavernier, Dunod, 2012.
Avant-propos
XI
Le code utilis dans cet ouvrage a t adapt pour illustrer clairement le sujet trait
dans chaque recette. Cela a pour consquence que certains raccourcis courants de
codage ont t vits, particulirement dans les premiers chapitres. Les programmeurs
C expriments utilisent souvent des expressions riches, mais condenses qui ont
lavantage de lefficacit et linconvnient dtre peu lisibles pour les dbutants.
Par exemple, lincrmentation des variables dans les premiers chapitres se fait par
lemploi dexpressions explicites qui sont faciles comprendre pour les dbutants en
programmation :
XII
Avant-propos
Nous nutilisons donc pas le code suivant dont se servent habituellement les
programmeurs expriments pour raliser la mme chose :
result++;
Vous tes libre demployer le style que vous prfrez. Les dbutants seront rassurs
en apprenant quil ny a aucune amlioration des performances ni rduction de la
taille du code en utilisant la version condense.
Certaines expressions sont cependant si courantes quelles sont utilises dans leur
forme condense. Par exemple, les expressions de boucle sont crites de la manire
suivante :
for(int i=0; i < 4; i++)
Une bonne pratique en programmation consiste sassurer que les valeurs que lon
utilise sont valides en les vrifiant avant leur emploi dans des calculs. Cependant, afin
de se concentrer sur le sujet trait dans les recettes, trs peu de code de traitement
derreur a t inclus dans les recettes.
XIII
Police en gras Indique les lignes de code sur lesquelles lattention est attire.
Espacement fixe italique Indique le texte qui doit tre remplac par des
valeurs fournies par lutilisateur.
Note
Cet encart indique un conseil, une suggestion ou une note.
Avertissement
Cet encart indique un avertissement ou une mise en garde.
Cet ouvrage est la traduction partielle du best-seller sur Arduino aux tats-Unis. Il
sagit du Arduino Cookbook (2e dition) paru chez OReilly (http://shop.oreilly.com/
product/0636920022244.do).
Louvrage original compte plus de 700 pages et plus de 200 recettes . Nous en
avons slectionn 105 parmi les plus originales et les plus performantes en partant
du principe quil existait dj plusieurs ouvrages pour dbutants en franais, et que
les amateurs dArduino avaient maintenant besoin douvrages plus avancs pour
progresser.
Le choix des 105 recettes de ce livre en franais sest fait avec laide prcieuse
de M. Christian Tavernier, auteur notamment chez Dunod (www.dunod.com) de
deux ouvrages sur Arduino daccs plus facile (http://www.dunod.com/search?search=
tavernier+arduino).
Les complments en ligne
XIV
1 COMMUNICATIONS SRIE
1.0 Introduction
Les communications srie offrent une faon simple et souple de faire communiquer
lArduino avec un ordinateur ou dautres priphriques. Ce chapitre explique
comment envoyer et recevoir des informations grce cette fonctionnalit.
En connectant le port srie de lArduino votre ordinateur, vous pouvez charger
des sketchs. Ce processus envoie des donnes depuis votre ordinateur vers lArduino
et lArduino envoie son tour des messages dtat lordinateur pour confirmer le
bon droulement du transfert. Les recettes de ce chapitre montrent comment on
peut utiliser cette liaison pour envoyer et recevoir des informations entre lArduino
et votre ordinateur ou tout autre priphrique srie.
Avertissement
Les communications srie sont aussi un outil pratique pour le dbogage. Vous pouvez envoyer des
messages de dbogage partir de lArduino vers lordinateur et les afficher sur lcran de lordinateur
ou sur un affichage LCD externe.
Vous pouvez aussi envoyer des donnes partir du Moniteur srie vers lArduino
en saisissant du texte dans la zone situe gauche du bouton Envoyer. La valeur
1 Communications srie
en bauds (la vitesse laquelle les donnes sont transmises est exprime en bits par
seconde) est slectionne dans la liste droulante situe en bas droite. Vous pouvez
utiliser la liste intitule Pas de fin de ligne pour gnrer automatiquement un
retour de chariot ou une combinaison de retour de chariot et de nouvelle ligne la
fin de chaque message envoy grce au bouton Envoyer, en choisissant lune des
options de la liste droulante.
Un sketch Arduino peut utiliser le port srie pour accder de manire indirecte (en
gnral via un programme proxy crit dans un langage tel que Processing) toutes
les ressources (mmoire, cran clavier, souris, connectivit rseau, etc.) que possde
votre ordinateur. Ce dernier peut aussi utiliser la liaison srie pour communiquer
avec des capteurs ou dautres priphriques connects lArduino.
La mise en uvre des communications srie implique du matriel et du logiciel. Le
matriel fournit la signalisation lectrique entre lArduino et le priphrique avec
lequel il communique. Le logiciel utilise le matriel pour envoyer des octets ou des
bits que le matriel connect interprte. Les bibliothques srie Arduino masquent
la plus grande partie de la complexit du matriel, mais cela aide de comprendre
les bases, particulirement si vous avez besoin de dtecter les erreurs dans un projet
mettant en uvre des communications srie.
Matriel srie
Le matriel srie envoie et reoit des donnes sous la forme dimpulsions lectriques
qui reprsentent les bits squentiels. Les zros et les uns qui transportent les
informations qui composent un octet peuvent tre reprsents de diffrentes manires.
Le modle utilis par Arduino est 0 volt pour reprsenter une valeur de bit gale 0,
et 5 volts (ou 3,3 volts) pour reprsenter une valeur de bit gale 1.
Note
Lutilisation de 0 volt (pour 0) et 5 volts (pour 1) est trs courante. On parle alors de niveau TTL car
ctait la manire dont les signaux taient reprsents dans lune des premires implmentations de la
logique numrique, appele Transistor-Transistor Logic (TTL).
1.0 Introduction
Broche de transmission
1 (aussi USB)
18
16
14
Broche de rception
0 (aussi USB)
19
17
15
1 Communications srie
1.0 Introduction
1 Communications srie
Il y a une fonctionnalit danalyse intgre pour les flux comme Serial afin
dextraire facilement les nombres et trouver du texte. Reportez-vous la discussion
de la recette 1.5 pour en apprendre plus sur lutilisation de cette fonctionnalit.
La bibliothque SoftwareSerial qui est livre avec Arduino a t beaucoup
amliore (voir les recettes 1.13 et 1.14).
Une fonction Serial.peek a t ajoute pour permettre de lire le caractre
suivant du buffer de rception. la diffrence de Serial.read, le caractre nest
pas supprim du buffer avec Serial.peek.
Complments
On veut envoyer du texte et des donnes pour les afficher sur lordinateur en utilisant
lEDI Arduino ou le programme de terminal srie de votre choix.
Solution
}
int number = 0;
void loop()
{
Serial.print("Le nombre est ");
Serial.println(number);
// affiche le nombre
delay(500); // on attend une demi-seconde entre les nombres
number++; // on passe au nombre suivant
}
Discussion
Pour afficher du texte et des nombres partir dun sketch sur un ordinateur par
le biais dune liaison srie, placez linstruction Serial.begin(9600) dans setup(),
puis utilisez les commandes Serial.print() pour afficher le texte et les valeurs que
vous voulez voir apparatre.
Le Moniteur srie peut afficher des donnes srie envoyes partir de lArduino.
Pour dmarrer le Moniteur srie, cliquez sur licne du Moniteur srie dans la barre
doutils qui est illustre la figure 1.2. Une nouvelle fentre souvre et affiche la
sortie de lArduino.
1 Communications srie
vous devez vrifier que la vitesse slectionne dans le Moniteur srie correspond la
vitesse dfinie par Serial.begin() dans le sketch.
Note
Si les vitesses denvoi et de rception sont dfinies correctement et que vous obtenez toujours
des caractres sotriques, vrifiez que vous avez slectionn la bonne carte dans lEDI (menu
OutilsType de carte). Toutes les cartes nont pas la mme vitesse et si vous avez slectionn la
mauvaise, choisissez la bonne et rechargez le sketch dans la carte.
Vous pouvez afficher du texte avec la fonction Serial.print(). Les chanes (texte
encadr par des guillemets) seront affiches telles quelles (mais sans les guillemets).
Par exemple, le code suivant :
Serial.print("Le nombre est ");
affiche :
Le nombre est
Les valeurs (nombres) que lon affiche dpendent du type de variable (voir la recette 1.
2). Par exemple, laffichage dun entier va faire apparatre sa valeur numrique ; si la
variable number est gale 1, le code suivant :
Serial.println(number);
va afficher :
1
Dans le sketch de cette recette, le nombre affich est 0 au dpart de la boucle, puis
il est incrment chaque tour de boucle. Le ln la fin de println provoque
laffichage de linstruction suivante sur une nouvelle ligne.
Cela devrait vous donner des ides pour afficher du texte et la valeur dcimale des
entiers. Reportez-vous la recette 1.2 pour de plus amples informations sur les
options de mise en forme de laffichage.
Il peut tre souhaitable denvisager lutilisation dun autre programme de terminal
qui possde plus de fonctionnalits que le Moniteur srie, notamment laffichage des
donnes au format texte ou binaire (ou les deux la fois), laffichage des caractres de
contrle, ou la journalisation dans un fichier. Il existe de nombreux programmes de
terminal tiers, dont les suivants qui sont recommands par les utilisateurs dArduino :
CoolTerm (http://freeware.the-meiers.org/ ) Programme de terminal freeware
convivial pour Windows, Mac et Linux.
CuteCom (http://cutecom.sourceforge.net/ ) Programme de terminal open source
pour Linux.
Bray Terminal (https://sites.google.com/site/terminalbpp/ ) Excutable gratuit
pour PC.
GNU screen (http://www.gnu.org/software/screen/ ) Programme de gestion
dcran virtuel open source qui prend en charge les communications srie ; livr
avec Linux et Mac OS X.
moserial (http://live.gnome.org/moserial) Autre programme de terminal open
source pour Linux.
PuTTY (http://www.chiark.greenend.org.uk/sgtatham/putty/ ) Programme
open source SSH pour Windows et Linux qui prend en charge les communications srie.
RealTerm (http://realterm.sourceforge.net/ ) Programme de terminal open source
pour PC.
ZTerm (http://homepage.mac.com/dalverson/zterm/ ) Shareware pour Mac.
De plus, un article du wiki Arduino explique comment configurer Linux pour quil
communique avec un Arduino laide de TTY (http://www.arduino.cc/playground/
Interfacing/LinuxTTY ).
Vous pouvez utiliser un cran LCD comme priphrique de sortie srie, mais les
fonctionnalits seront limites. Vrifiez la documentation pour voir comment votre
cran gre les retours de chariot car certains crans ne gnrent pas automatiquement
une nouvelle ligne aprs une instruction println.
Complments
1 Communications srie
pouvez utiliser la plupart des recettes de ce chapitre avec cette bibliothque (voir le
chapitre 8).
On veut envoyer des donnes srie partir de lArduino pour les afficher sous la
forme de texte, de valeurs dcimales, hexadcimales ou binaires.
Solution
On peut afficher des donnes sur le port srie dans plusieurs formats diffrents ; le
sketch suivant illustre toutes les options de mise en forme :
/*
* SerialFormatting
* Affiche des valeurs dans diffrents formats sur le port srie
*/
char chrValue = 65; // valeurs de dpart afficher
byte byteValue = 65;
int intValue = 65;
float floatValue = 65.0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println("chrValue: ");
Serial.println(chrValue);
Serial.write(chrValue);
Serial.println();
Serial.println(chrValue,DEC);
Serial.println("byteValue: ");
Serial.println(byteValue);
Serial.write(byteValue);
Serial.println();
Serial.println(byteValue,DEC);
Serial.println("intValue: ");
Serial.println(intValue);
Serial.println(intValue,DEC);
Serial.println(intValue,HEX);
Serial.println(intValue,OCT);
Serial.println(intValue,BIN);
Serial.println("floatValue: ");
Serial.println(floatValue);
delay(1000); // on attend une seconde avant
chrValue++; // l'affichage de la valeur suivante
10
byteValue++;
intValue++;
floatValue +=1;
}
A A
65 A
65 65
65.00
B B
66 B
66 66
66.00
65
65
41 101 1000001
66
66
42 102 1000010
Discussion
Le tableau 1.2 illustre ce que lon voit quand on affiche des variables avec les routines
Arduino.
Note
Lexpression Serial.print(val,BYTE); nest plus prise en charge en Arduino 1.0.
Si votre code a besoin que des variables byte se comportent comme des variables char (cest--dire quil
les affiche comme des caractres ASCII), vous devez le modifier en utilisant Serial.write(val);.
11
1 Communications srie
Tableau 1.2 Formats daffichage avec Serial.print
Type
de
donnes
print
(val)
print
(val,DEC)
write
(val)
print
(val,HEX)
print
(val,OCT)
print
(val,BIN)
char
65
41
101
1000001
byte
65
65
41
101
1000001
int
65
65
41
101
1000001
long
Le format dune valeur long est identique celui dune valeur int
65.00
Affichage non pris en charge pour les valeurs en virgule flottante
65.00
Les valeurs double se comportent comme les valeurs float
float
double
Le sketch de cette recette utilise une ligne spare de code source pour chaque
instruction print, ce qui peut rendre les instructions print complexes volumineuses.
Par exemple, pour afficher la ligne suivante :
A 5 secondes : vitesse = 17, distance = 120
Cela fait beaucoup de lignes de code pour une seule ligne daffichage et vous pouvez
combiner le tout de la manire suivante :
Serial.print("A "); Serial.print(t); Serial.print(" secondes, vitesse = ");
Serial.print(v); Serial.print(", distance = ");Serial.println(d);
12
Complments
1.3 Rception
de donnes srie sur lArduino
1.3
Problme
Il est facile de recevoir des valeurs de 8 bits (char et byte), car les fonctions Serial
utilisent des valeurs de 8 bits. Ce sketch reoit un chiffre (de 0 9) et fait clignoter
la LED de la broche 13 un rythme proportionnel la valeur reue :
/*
* Sketch SerialReceive
* Fait clignoter la LED un rythme proportionnel la valeur reue
*/
const int ledPin = 13; // broche laquelle la LED est connecte
int
blinkRate=0;
// rythme de clignotement stock dans cette variable
void setup()
{
Serial.begin(9600); // Initialise le port srie pour envoyer et recevoir
9600 bauds
pinMode(ledPin, OUTPUT); // Dfinit cette broche en sortie
}
void loop()
{
if ( Serial.available()) // Vrifie si au moins un caractre est disponible
{
char ch = Serial.read();
if( isDigit(ch) ) // est-ce un chiffre compris entre 0 et 9 ?
{
blinkRate = (ch - '0');
// valeur ASCII convertie en chiffre
blinkRate = blinkRate * 100; // rythme = 100ms * valeur du chiffre
}
}
blink();
}
// On fait clignoter la LED au rythme dtermin par blinkRate
void blink()
{
digitalWrite(ledPin,HIGH);
13
1 Communications srie
La conversion des caractres ASCII reus peut se rvler problmatique si vous ntes
pas familier avec la manire dont le code ASCII reprsente les caractres. Lexemple
suivant convertit le caractre ch en sa valeur numrique :
blinkRate = (ch - '0');
14
{
char ch = Serial.read();
if( isDigit(ch) )// est-ce un chiffre compris entre 0 et 9 ?
{
value = (value * 10) + (ch - '0'); // oui, on accumule la valeur
}
else if (ch == 10) // est-ce un caractre de nouvelle ligne ?
{
blinkRate = value; // dfinit blinkrate avec la valeur accumule
Serial.println(blinkRate);
value = 0; // rinitialise la valeur 0 pour tre prt pour la
squence suivante de chiffres
}
}
blink();
}
Saisissez une valeur, par exemple 123, dans la zone de texte du Moniteur srie et
cliquez sur Envoyer ; le rythme de clignotement sera dfini 123 millisecondes.
Chaque chiffre est converti partir de sa valeur ASCII en valeur numrique. Comme
les nombres sont en base 10, chaque chiffre successif est multipli par 10. Par
exemple, la valeur du nombre 234 est 2 * 100 + 3 * 10 + 4. Voici le code pour
accomplir cela :
if( isDigit(ch) ) // est-ce un chiffre compris entre 0 et 9 ?
{
value = (value * 10) + (ch - '0'); // oui, on accumule la valeur
}
Si vous voulez grer des nombres ngatifs, votre code doit reconnatre le signe moins
('-') en en-tte. Dans cet exemple, chaque valeur numrique doit tre spare par
un caractre qui nest pas un chiffre ou un signe moins :
int value = 0;
int sign = 1;
void loop()
{
if( Serial.available())
{
char ch = Serial.read();
if( isDigit(ch) ) // est-ce un chiffre compris entre 0 et 9 ?
value = (value * 10) + (ch - '0'); // oui, on accumule la valeur
else if( ch == '-')
sign = -1;
else // cela suppose que tout caractre n'tant pas un chiffre ou un signe
moins termine la valeur
{
value = value * sign ; // dfinit la valeur avec la valeur accumule
Serial.println(value);
value = 0; // rinitialise la valeur 0 pour tre prt pour la
squence suivante de chiffres
sign = 1;
15
1 Communications srie
}
}
}
Une autre approche pour convertir les chanes de caractres reprsentant des nombres
consiste utiliser la fonction de conversion du langage C appele atoi (pour les
variables int) ou atol (pour les variables long). Ces fonctions au nom obscur
convertissent une chane en entiers ou en entiers longs. Pour les utiliser, vous devez
recevoir et stocker la totalit de la chane dans un tableau de caractres avant de
pouvoir appeler la fonction de conversion.
Ce fragment de code termine la saisie des chiffres quand le caractre saisi nest pas
un chiffre (ou si le buffer est plein) :
const int MaxChars = 5; // une chane int contient jusqu' 5 chiffres et
// est termine par un 0 pour indiquer la fin de la
chane
char strValue[MaxChars+1]; // doit tre suffisamment grand pour les chiffres
et la valeur nulle de terminaison
int index = 0;
// l'indice du tableau stockant les chiffres reus
void loop()
{
if( Serial.available())
{
char ch = Serial.read();
if( index < MaxChars && isDigit(ch) ){
strValue[index++] = ch; // ajoute le caractre ASCII la chane;
}
else
{
// ici quand le buffer est plein ou si un caractre n'est pas un chiffre
strValue[index] = 0;
// on termine la chane par un 0
blinkRate = atoi(strValue); // on utilise atoi pour convertir la chane
en un int
index = 0;
}
}
blink();
}
strValue est une chane de chiffres cre partir des caractres reus sur le port srie.
atoi (abrviation de ASCII vers integer) est une fonction qui convertit une chane
de caractres en un entier (atol convertit en un entier long).
Arduino 1.0 a ajout la fonction serialEvent que vous pouvez utiliser pour grer les
caractres srie entrants. Si vous avez du code au sein dune fonction serialEvent
dans votre sketch, celui-ci sera appel une fois chaque passage dans la fonction
loop. Le sketch suivant accomplit la mme tche que le premier sketch de cette
recette, mais il utilise serialEvent pour grer les caractres entrants :
16