enarvuino_14x21_00.fm Page 1 Lundi, 18. février 2013 10:55 10
Clemens VALENS (www.polyvalens.com)
Maîtrisez les microcontrôleurs à l’aide d’Arduino
www.elektor.fr/arduino Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21TDM.fm Page iii Lundi, 18. février 2013 10:55 10
Sommaire 1.
Démarrage rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1
Installation du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2
Installation du matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.1
1.2.2
1.2.3
Windows (XP ou plus récent) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Carte sans puce FTDI (Uno, Mega 2560 ou plus récente) . . . . . . . . . . 10 Carte avec puce FTDI (Duemilanove, Nano, Diecimila…) . . . . . . . . . 11 Comment trouver le numéro de port de la carte sous Windows . . . . . . 12 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Carte sans puce FTDI (Uno, Mega 2560 ou plus récente) . . . . . . . . . . 13 Carte avec puce FTDI (Duemilanove, Nano, Diecimila…) . . . . . . . . . 14 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3
Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1
On frappe à la porte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2
Mais on va où ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.
Connaître son adversaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1
Un peu d’histoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2
Ils sont mimi, mais qu’est-ce qu’il y a dedans ? . . . . . . . . . . . . . . . . . . . 23 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.2.10
Le processeur (CPU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 L’oscillateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Les mémoires mortes, vivantes et zombies . . . . . . . . . . . . . . . . . . . . . . 24 Les interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Entrées-sorties (E/S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Convertisseur analogique-numérique (CAN) . . . . . . . . . . . . . . . . . . . . 26 Convertisseur numérique-analogique (CNA) . . . . . . . . . . . . . . . . . . . . 27 Modules de communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Gestion de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Autres périphériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21TDM.fm Page iv Lundi, 18. février 2013 10:55 10
iv 3.3
Les outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.1 3.3.2 3.3.3
La programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Charger le programme dans le micro . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Déboguer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.
Prototypage rapide à l’italienne. . . . . . . . . . . . . . . . . . . . . . 37
4.1
Le Parrain 1, 2 et 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2
Pâtes, fromage et sauce tomate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3
L’ingrédient de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.4
La cuisine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6
4.5
Menu Fichier (File) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Menu Édition (Edit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Menu Croquis (Sketch) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Menu Outils (Tools) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Menu Aide (Help) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Les onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Le service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.5.1 4.5.2
Plan de table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Le maître d’hôtel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.
Mon premier délit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1
La clé à molette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2
Repérer les lieux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3
Préparer le coup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.4
Des types avec des problèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.5
Les faits divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.6
Prendre « perpette » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.7
L’incarcération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.8
If-else ou la liberté conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.9
La réinsertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21TDM.fm Page v Lundi, 18. février 2013 10:55 10
v
6.
Les signaux numériques : tout ou rien . . . . . . . . . . . . . . 71
6.1
Trois surprises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2
Toujours des surprises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.3
Le clavier matriciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.4
Charlie à la rescousse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.5
Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.6
Boucles f’Or et les trois (t)ours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.6.1 6.6.2 6.6.3
for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.7
Plus de touches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.8
S.O.S. Fantômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.9
Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.10
Mini-afficheur à LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.11
Le défilé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.12
Petite arnaque entre amis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.13
De nouveaux amis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.14
C’est nul, pas zéro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.15
La pomme de Blanche Neige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.16
Le trognon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.17
Une astuce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.
Les signaux analogiques : ni noir ni blanc. . . . . . . . . 115
7.1
Le passage au numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 7.1.1 7.1.2 7.1.3 7.1.4
7.2
Des types reconvertis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Le gros du budget passe dans les frais de représentation . . . . . . . . . . 119 Un truc à savoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Les références du CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Retour à l’analogique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21TDM.fm Page vi Lundi, 18. février 2013 10:55 10
vi 7.3
Regarde, maman, sans les mains ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 7.3.7 7.3.8
Pilote de moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Obtenir une réponse indicielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Le si composé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Le régulateur PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Filtre numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Duo de choc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Le coin des matheux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Avant-première . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
7.4
Récréation : le Misophone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.5
Un peu de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
7.6
Les No d’Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.7
Regarde, maman, sans Arduino ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.
La communication : un art et une science . . . . . . . . . 157
8.1
Visualisons nos données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.1.1
8.2
L’action de communiquer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 8.2.1 8.2.2
8.3
Quelques subtilités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Enchaînons les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Briser les chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Décodeur NMEA 0183A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Mutatis mutandis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Faites demi-tour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Perluète cacahouète . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Liaisons à deux fils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 8.4.1 8.4.2
8.5
Asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Synchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
RS-232 ou port série ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.3.7
8.4
Raccorder un afficheur alphanumérique à cristaux liquides . . . . . . . . 159
I²C, TWI et Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Capteur de pression atmosphérique . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Liaisons à trois ou quatre fils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 8.5.1 8.5.2
Pilote amélioré pour afficheur graphique . . . . . . . . . . . . . . . . . . . . . . 198 Capteur d’humidité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
8.6
Tous ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
8.7
Quand Arduino n’est pas là . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
8.8
Les pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
8.9
Savais-tu ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21TDM.fm Page vii Lundi, 18. février 2013 10:55 10
vii
9.
Le temps est compté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
9.1
Ici radio Francfort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.1.1
DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
9.2
Réaliser un collier de secondes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
9.3
Décoder un chapelet de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 9.3.1
Décodeur DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
9.4
millis et micros, deux petites fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 234
9.5
C’est qui, Émilie ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 9.5.1
Deux types de MLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
9.6
Le Maître du Temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
9.7
Peut mieux faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
9.8
Attendre un heureux événement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
9.6.1
9.8.1
Émetteur DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Trier tes télécommandes infrarouges . . . . . . . . . . . . . . . . . . . . . . . . . 251
9.9
Arrêter ou continuer, break ou continue . . . . . . . . . . . . . . . . . . . . . . . . 254
9.10
L’art de la division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
9.11
L’union structurée des types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 9.11.1 9.11.2 9.11.3
9.12
struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
C’est une image ? Ce sont des données ? C’est Superfichier ! . . . . . . . 258 9.12.1
Le format de fichier SVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
9.13
Ce que disent les manipulateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
9.14
To goto or not to goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
9.15
Jeux de trains télécommandés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
9.13.1
9.15.1 9.15.2 9.15.3
Le protocole NEC-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
La composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Respecter les horaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Ça passe ou ça casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
9.16
Profession : émeutier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
9.17
Résumons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 9.17.1 9.17.2 9.17.3
9.18
Mode normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Mode CTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Mode capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Que la force soit avec toi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21TDM.fm Page viii Lundi, 18. février 2013 10:55 10
viii
10. Les interruptions : la boîte de Pandore . . . . . . . . . . . . 287 10.1
Ma première interruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 10.1.1 10.1.2
10.2
Temporisateur 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Produire un signal de 1 kHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Le loup déguisé en mouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 10.2.1
Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
10.3
Comme une lettre à la Poste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
10.4
Partir dans le décor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
10.5
On sonne à la porte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.5.1
10.6
L’interruption de trop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 10.6.1
10.7
Réalisons une bascule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 La pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Mais c’est qui qui sonne à la porte ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 10.7.1
Les interruptions multiplexées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
10.8
Vive le codeur rotatif ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
10.9
RAZ à toutes les sauces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 10.9.1
POR, BOR, BOD et RAZ de l’AVR . . . . . . . . . . . . . . . . . . . . . . . . . . 314
10.10 Inversons les rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.10.1 Une nuisance sonore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
10.11 La Cucaracha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 10.11.1 Le protocole 1-Wire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
10.12 Feu ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 10.12.1 SMBus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Liste des programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Liste des figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Liste des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21_03.fm Page 24 Lundi, 18. février 2013 10:18 10
3. Connaître son adversaire 3.2.2 L’oscillateur Un programme est une séquence d’instructions à exécuter l’une après l’autre (oublions ici l’exécution en parallèle). Cela implique un cadencement et c’est l’horloge du processeur qui en est chargée. Elle a besoin d’un oscillateur, qui se matérialise souvent sous forme d’un quartz et de deux petits condensateurs à proximité du circuit intégré. Quand on n’attache pas d’importance à la précision de l’horloge, ces trois composants peuvent être remplacés par un résonateur, voire un réseau RC. Il est aussi possible de cadencer le micro par un oscillateur externe, celui d’un autre micro par exemple. En réalité, ces composants externes ne forment que le sommet visible de l’iceberg, l’oscillateur consiste en bien plus de transistors qu’on ne l’imagine (essaie de créer un oscillateur avec uniquement un quartz et deux condensateurs, tu verras bien que ce n’est pas facile). D’ailleurs, de nombreux micros fonctionnent parfaitement sans ces composants externes puisqu’ils disposent de tout ce qu’il faut en interne, sur la puce. La fréquence n’est pas forcément précise mais une horloge embarquée permet d’économiser de l’espace sur la platine et quelques composants ; c’est toujours bon à prendre quand on produit plusieurs (centaines de) milliers d’exemplaires d’un montage. Pour obtenir des fréquences de l’horloge élevées, les constructeurs équipent leurs micros d’un module à boucle à phase asservie (la traduction correcte de l’anglais Phase Locked Loop ou PLL), ainsi les micros cadencés à 60 ou 80 MHz, voire plus, sont devenus monnaie courante. 3.2.3 Les mémoires mortes, vivantes et zombies En règle générale, le microcontrôleur ne se contente pas d’une seule mémoire. En effet, il dispose d’une mémoire zombie (non volatile, mais reprogrammable, c’est de la mémoire flash dans la majorité des cas) pour stocker le micrologiciel (le logiciel qui sera exécuté par le micro, les anglophones disent firmware), d’une mémoire vive pour stocker les données et parfois aussi d’une petite mémoire non volatile (EEPROM) pour des données importantes et des paramètres de configuration. La mémoire de programme est généralement (nettement) plus grosse que la mémoire vive, c’est normal, car la plupart des programmes n’utilisent pas tant de mémoire vive que ça. La conséquence de ce choix est que les applications gourmandes en mémoire vive comme les téléphones portables ou les systèmes Linux embarqués ne peuvent pas utiliser n’importe quel micro. Des modèles spécialisés capables de travailler avec des mémoires externes volumineuses sont proposés pour ce genre d’applications.
24
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21_03.fm Page 36 Lundi, 18. février 2013 10:18 10
3. Connaître son adversaire
Oscilloscope
Croquis sur l’ordinateur (portable)
Télécommande Haut-parleur Carte Arduino Évite désormais de ranger ton environnement de travail, le désordre stimule la créativité (selon des scientifiques allemands). Pour fêter le début de ta nouvelle vocation, offre-toi un oscilloscope (neuf ou d’occasion). Tu verras, il changera ta vie.
36
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
4.5 Le service 4.5.1 Plan de table Dans Arduino, les noms des broches ont été simplifiées, la notion traditionnelle de ports d’entrées-sorties (port A, port B, etc.) a été remplacée par des numéros. La numérotation est simple et logique quand on sait que la première carte Arduino comportait un ATmega8 : elle commence par 0 sur la broche 2. Comment ça, pas logique ? Pourtant ça l’est, car la broche 1 du circuit ATmega8 correspond à PC6, c.-à-d. l’entrée/sortie (E/S) numéro 6 du port C. Or, cette broche constitue aussi l’entrée Reset et on a préféré la connecter à un bouton-poussoir, PC6 n’est donc plus libre1. La deuxième broche, PD0, soit E/S numéro 0 du port D, est disponible et la numérotation commence alors ici. Elle continue en montant et en sautant les broches qui ne sont pas des E/S (alimentation) ou qui ne sont pas libres pour d’autres raisons, comme PB6 et PB7 réservées au quartz. Au final, on se retrouve avec 20 E/S numériques (de 0 à 19). Les E/S 14 à 19 sont reliées au convertisseur analogique-numérique (CAN) du micro et il a été décidé de les regrouper sur un connecteur à part et de les renommer « entrées analogiques » (de 0 à 5). Du coup, une carte de type Uno offre 14 E/S numériques et 6 entrées analogiques. Les 14 E/S numériques sont câblées sur deux connecteurs nommés Digital (PWM#) sur un côté de la carte, les 6 analogiques sur un connecteur en face, nommé Analog in. Aligné avec ce connecteur, on trouve un quatrième connecteur nommé Power qui comporte également le signal Reset. Pourquoi les connecteurs des E/S numériques portent-ils la mention PWM# ? Eh bien, les broches sur la carte marquées par un dièse (« # », parfois aussi par un tilde « ~ ») sont capables de fournir des signaux à modulation à largeur d’impulsion (MLI, PWM en anglais). Elles sont balisées car, dans Arduino, elles servent comme sorties analogiques. Leur nombre dépend du micro, l’ATmega8 n’en a que trois (E/S 9 à 11), l’ATmega168 et l’ATmega328 en possèdent six (E/S 3, 5, 6, 9 à 11). Pour les cartes de type Mega équipées de micros avec plus de broches que l’ATmega8/168/328, la numérotation des E/S est différente car les broches ont été regroupées sur des connecteurs par fonction. Ainsi, une telle carte dispose de connecteurs Power, Analog in, Digital, Communication et PWM. Le connecteur Digital est à double rangée. Au total, une carte Mega 2560 offre 70 E/S numériques, découpées en 32 E/S numériques (Digital), 16 entrées analogiques (Analog in), 15 sorties MLI (PWM) et 10 broches réservées à la Communication.
1. Cela n’est pas tout à fait correct car il est toujours possible d’utiliser ce port comme entrée numérique connectée à un bouton-poussoir en programmant le fusible RSTDISBL, mais il y en a qui ont essayé… ils ont eu des problèmes. C’est toi qui vois.
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
55
5. Mon premier délit Dans la fonction setup plus haut, il y avait aussi des commentaires dits de fin de ligne, précédés par « // ».Tout ce qui vient après // sur la même ligne est ignoré par le compilateur. Tous les compilateurs C ne comprennent pas forcément ce type de commentaires. En effet, il s’agit d’une des rares fonctions C++ qui a été adoptée par le C (dans le standard C99) et seuls les compilateurs conformes à ce standard sont censés accepter les commentaires de fin de ligne. Les commentaires dans setup contiennent des caractères accentués. C’est une maladresse à éviter parce que les compilateurs digèrent parfois mal les caractères exotiques, même dans les commentaires (oui, en C, « é » est un caractère exotique). En C, utilise uniquement les caractères ASCII de base, les accents et autres caractères spéciaux ou exotiques sont à exclure. Fais attention quand les deux types de commentaires sont mélangés ou quand une partie de code qui contient déjà des commentaires est mise en commentaire car cela peut perturber le compilateur. Si tu vois apparaître une erreur ou un avertissement qui parle de nested comments (commentaires imbriqués), vérifie bien que tu n’as pas oublié un */ quelque part. Tu apprendras vite à ne pas te fier à la coloration syntaxique de l’éditeur, un éditeur n’est pas un compilateur !
5.6
Prendre « perpette »
Maintenant que nous disposons d’une variable led et que la broche connectée à la LED est configurée en sortie, nous pouvons attaquer la fonction loop. Pour allumer et éteindre la LED, l’API d’Arduino offre la fonction digitalWrite. Elle prend deux arguments : le numéro de la broche et la valeur HIGH (niveau logique haut) ou LOW (niveau logique bas). Si on appelle cette fonction d’abord avec la valeur HIGH et ensuite avec la valeur LOW et si nous attendons un peu entre deux appels, la LED clignotera puisque cet enchaînement est exécuté continuellement grâce à la boucle. La fonction delay permet d’introduire des délais et donc d’attendre. Le temps d’attente est spécifié en millisecondes. Voilà le croquis terminé : /* * Blink 1 */ int led = 13; void setup(void) { pinMode(led,OUTPUT);
64
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
5.6 Prendre « perpette » }
void loop(void) { digitalWrite(led,HIGH); delay(500); digitalWrite(led,LOW); delay(500); }
// // // //
allume la LED attends 500 ms eteins la LED attends 500 ms
Ceci est une méthode, mais pas la seule. Ce croquis permet de spécifier séparément la durée de l’allumage et celle de l’extinction. Si c’est inutile, tu peux modifier le croquis pour ne spécifier qu’une seule et même durée d’allumage et d’extinction, comme ceci : /* * Blink 2 */ int led = 13; int state = HIGH; void setup(void) { pinMode(led,OUTPUT); } void loop(void) { digitalWrite(led,state); if (state==HIGH) { state = LOW ; } else { state = HIGH ; } delay(500); }
// allume ou eteins la LED
// inverse l’etat
// attends 500 ms
Ici, si (if) la variable state est égale (« == », soit deux fois « = », inégale est indiqué par « != ») à HIGH, nous lui donnerons la valeur LOW. Sinon (else) nous lui donnerons la valeur HIGH. Ce bout de code a pour but d’inverser la valeur de state à chaque tour de boucle.
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
65
enarvuino_14x21_06.fm Page 74 Lundi, 18. février 2013 10:20 10
6. Les signaux numériques : tout ou rien En modifiant ainsi le croquis, deux doutes sont levés : key est maintenant clairement une entrée et son état au repos est HIGH. Fixer son état au repos à LOW n’est pas possible, l’AVR ne possède pas de résistance de rappel vers le 0 V, mais tu peux toujours connecter une résistance externe au cas où tu en aurais besoin.
6.2
Toujours des surprises
Après les trois surprises du croquis décrites dans le paragraphe précédent, en voici encore une autre : sur mon ordinateur, quand je le compile avec Arduino 1.0.1, le croquis compilé occupe 1058 octets. Remplace maintenant les deux dernières lignes par une seule, comme ceci : /* * Key 3 */ int led = 13; int key = 8; void setup(void) { pinMode(led,OUTPUT); pinMode(key,INPUT_PULLUP); } void loop(void) { digitalWrite(led,digitalRead(key)); }
Regarde l’appel de digitalWrite dans la fonction loop. Le deuxième argument est l’appel d’une fonction au lieu d’un entier. Cela peut paraître étrange mais, en C, il est tout à fait légal de passer un appel de fonction comme argument d’une autre fonction tant que le résultat de cet appel est compatible avec l’argument. En clair, puisque le résultat de digitalRead est un entier, nous pouvons l’utiliser à la place de n’importe quel autre entier, comme ici en tant que deuxième argument pour digitalWrite. Sur mon ordinateur, la compilation de cette version du croquis crée un exécutable de 1064 octets, soit 6 octets de plus pour exactement le même fonctionnement. C’est curieux, non ? En effet, ici nous touchons aux processus internes du compilateur qui ne sont pas évidents à comprendre. En expérimentant un peu avec le code, nous pouvons déterminer avec plus de précision l’origine de cette différence 74
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21_07.fm Page 129 Lundi, 18. février 2013 10:21 10
7.3 Regarde, maman, sans les mains ! Si le moteur ne tourne pas, cherche l’erreur. Les 12 V sont-ils bien présents ? Estce que le pilote est bien câblé ? Les transistors sont-ils connectés comme il faut ? Ne sont-ils pas inversés (les N-MOSFET bien en bas, les P-MOSFET en haut) ? Etc. 7.3.2 Obtenir une réponse indicielle Nous allons maintenant modifier et étendre notre croquis pour tester l’entrée analogique, comme ceci : /* * motor test 2 */ int motor1 = 9; int motor2 = 10; int slider = A0; void setup(void) { Serial.begin(115200); pinMode(motor1,OUTPUT); pinMode(motor2,OUTPUT); pinMode(slider,INPUT); digitalWrite(motor1,LOW); digitalWrite(motor2,LOW); } void loop(void) { Serial.println(analogRead(slider)); delay(250); }
Le moteur reste au repos et le port série émet toutes les 250 ms la valeur mesurée sur l’entrée analogique A0 du micro. Fais varier la tension pour vérifier qu’elle est bien numérisée. Note les valeurs min. et max. au cas où la tension n’atteint pas 0 V ou 5 V, voire aucune de ces deux valeurs. Il est temps de passer aux choses sérieuses, nous allons utiliser l’oscilloscope ou le fréquencemètre. La fréquence à mesurer sera autour de 2 kHz. Dans le croquis suivant (Motor test 3), mets la ligne en gras, italique et souligné en commentaire à l’aide du double //, comme ceci : // i += 1;
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
129
enarvuino_14x21_08.fm Page 160 Lundi, 18. février 2013 10:21 10
8. La communication : un art et une science
Figure 8-1 - Un afficheur à cristaux liquides connecté en mode 4 bits. Ce montage fonctionne pour tous les modules LCD compatibles HD44780. P1 permet de régler le contraste, T1 pilote le rétroéclairage.
compte. Si un jour tu rencontres des problèmes un peu aléatoires avec un afficheur parfaitement câblé, regarde si ralentir la communication permet d’éviter les ennuis. Écrire un pilote pour un afficheur compatible HD44780 n’est plus nécessaire car des milliers de programmeurs l’ont fait depuis l’introduction de cette puce. L’internet grouille littéralement de pilotes libres pour ce type de LCD, écrits dans tous les langages de programmation imaginables. Arduino aussi dispose d’une bibliothèque avec toutes les fonctions nécessaires pour piloter un tel LCD, nous n’allons donc pas perdre de temps à refaire l’exercice. Note qu’il s’agit d’une bibliothèque pour Arduino et pas d’une partie de l’API Arduino, l’accès aux fonctions de la bibliothèque exige alors un (tout petit) peu de travail supplémentaire. Ouvre un nouveau croquis, clique sur Croquis (Sketch) puis sur Importer bibliothèque… (Import Library…) et choisis dans la liste qui s’affiche la bibliothèque LiquidCrystal. Le résultat de cette opération n’est pas spectaculaire, juste une ligne de code insérée en haut de ton croquis : #include
160
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21_09.fm Page 227 Lundi, 18. février 2013 10:22 10
9.2 Réaliser un collier de secondes Au lieu d’envoyer les durées des bits sur le port série, elles sont maintenant stockées dans la variable dt. Si la valeur de dt est supérieure à 50 ms, mais inférieure à 150 ms, nous pouvons supposer que nous avons affaire à un niveau logique 0 et un caractère « 0 » est enregistré dans la trame bits. Si dt dépasse les 150 ms, mais reste inférieure à 250 ms, la valeur du bit reçu est de 1 et un caractère « 1 » est donc rajouté à bits. Enfin, si dt dépasse les 1 500 ms, nous pouvons supposer que nous avons détecté l’absence du bit no 59 qui indique la fin de la trame. La trame est envoyée sur le port série avant d’être vidée pour créer de la place pour la réception de la prochaine. Grâce à cette méthode, la polarité des bits n’a aucune importance et le croquis fonctionnera avec tous les signaux, inversés ou pas. Comme tu l’as remarqué, j’ai choisi une marge de ±50 ms pour les deux durées de bit et même plus pour la fin de trame. C’est peut-être trop et pour plus de certitude tu pourras diminuer les marges. Les trames envoyées sur le port série ressemblent à ceci : 0010000 00101001001110000100100001001010010011100110000010010010000 01110000011110000100110001000010010011100110000010010010000 00001011011010100100101001000010010011100110000010010010000
Elles contiennent toutes 59 bits, sauf la première qui correspond à un fragment de fin de trame, puisque l’algorithme n’était pas encore synchronisé avec le flux de bits. La prochaine étape est de décoder la trame. Son format est bien documenté sur l’internet, voilà ce que ça donne pour la première trame de 59 bits : Bit(s)
Description
0 à 14
Réservé
Reçu(s)
Décodé(s)
001010010011100
-
15
Émetteur de réserve
0
0
16
Basculement été/hiver au début de la prochaine heure.
0
0
17, 18
Décalage par rapport à l’heure UTC.
10
2
19
Ajout d’une seconde intercalaire à la fin de l’heure.
0
0
20
Début de la transmission des informations horaires.
1
1
Tableau 9-1 - La signification des bits dans la trame horaire DCF77.
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
227
10.6 L’interruption de trop
Figure 10-1 Le programmeur optimiste.
interruptions s’il est vraiment nécessaire que tout continue tout le temps. Par contre, si tu fais cela, tu libères encore un autre mauvais génie de la boîte de Pandore des interruptions : le débordement de la pile (stack overflow en anglais). 10.6.1 La pile Le micro possède une mémoire spéciale, appelée la pile (stack), qui joue un peu le rôle de médiateur entre programme principal et fonctions ou routines d’interruption. Cette mémoire est appelée pile car, en théorie, on ne peut pas écrire là où on veut, mais uniquement au début. C’est donc une sorte de pile de données ; la dernière donnée écrite est la première qui puisse être lue. La pile est utilisée pour passer les arguments aux fonctions, pour stocker les variables locales et quand le micro doit quitter son poste pour aller exécuter une fonction ou une routine d’interruption. La pile contient aussi l’adresse de l’instruction que le micro avait prévu d’exécuter s’il n’avait pas été interrompu pour exécuter cette fonction ou routine d’interruption. Le micro est un vrai Petit Poucet, il laisse derrière lui, sur la pile, une trace d’adresses qui lui permet de retrouver l’endroit où il était au moment où il a été appelé pour faire autre chose. Comme toutes les ressources dont dispose le micro, la pile aussi connaît des limites. Souvent la pile mobilise une partie de la mémoire vive, laquelle n’est déjà pas très grande, aussi a-t-on tendance à dimensionner la pile au plus juste. Cela veut dire que, si le programme s’exécute normalement, la pile aura assez de place pour stocker les arguments, les variables locales et les adresses de retour de toutes les fonctions du plus long enchaînement de fonctions possible dans le programme. Donc, si une fonction en appelle une autre qui à son tour en appelle une troisième, etc. il faut que la pile dispose d’assez de place pour empiler toutes les adresses de retour. Les arguments des fonctions et les variables locales sont également stockés Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
303
enarvuino_14x21LDM.fm Page 333 Lundi, 18. février 2013 2:40 14
Liste des programmes Chapitre 5
Chapitre 8
Blink 1 . . . . . . . . . . . . . . . . . . . . . . . . . 64 Blink 2 . . . . . . . . . . . . . . . . . . . . . . . . . 65
LCD . . . . . . . . . . . . . . . . . . . . . . . . . . 161 La difference entre write et print . . . . 167 Serial.find . . . . . . . . . . . . . . . . . . . . . 170 read nmea sentence . . . . . . . . . . . . . . 170 read nmea sentence 2 . . . . . . . . . . . . . 173 read nmea sentence 3 . . . . . . . . . . . . . 175 gps inverter . . . . . . . . . . . . . . . . . . . . 184 HP03 temperature & pressure sensor 192 weather3 . . . . . . . . . . . . . . . . . . . . . . 210
Chapitre 6 Key 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Key 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Key 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Key matrix 1 . . . . . . . . . . . . . . . . . . . . 76 Charlieplexing . . . . . . . . . . . . . . . . . . . 78 Key matrix 2 . . . . . . . . . . . . . . . . . . . . 85 Key matrix 3 . . . . . . . . . . . . . . . . . . . . 90 LED matrix 1 . . . . . . . . . . . . . . . . . . . 92 LED matrix 2 . . . . . . . . . . . . . . . . . . . 95 Money game . . . . . . . . . . . . . . . . . . . 102 Toggle . . . . . . . . . . . . . . . . . . . . . . . . 113
Chapitre 7 voltmeter . . . . . . . . . . . . . . . . . . . . . . multichannel voltmeter . . . . . . . . . . . dimmer . . . . . . . . . . . . . . . . . . . . . . . motor test 1 . . . . . . . . . . . . . . . . . . . . motor test 2 . . . . . . . . . . . . . . . . . . . . motor test 3 . . . . . . . . . . . . . . . . . . . . not working PID controller . . . . . . . . PID controller . . . . . . . . . . . . . . . . . . misophone . . . . . . . . . . . . . . . . . . . . . chip thermometer . . . . . . . . . . . . . . .
117 120 123 128 129 130 135 139 147 152
Chapitre 9 DCF77 polling pulse measuring . . . . 224 DCF77 polling pulse measuring 2 . . . 226 DCF77 polling pulse measuring 3 . . . 229 dcf77 transmitter . . . . . . . . . . . . . . . . 242 Guess IR format . . . . . . . . . . . . . . . . . 252 Export IR pulses to SVG file . . . . . . . 260 Decode NEC IR RC protocol . . . . . . 264 Sound detector . . . . . . . . . . . . . . . . . . 279
Chapitre 10 interrupts 1 . . . . . . . . . . . . . . . . . . . . . 288 interrupt 2 . . . . . . . . . . . . . . . . . . . . . 289 interrupt 3 . . . . . . . . . . . . . . . . . . . . . 296 interrupt 4 . . . . . . . . . . . . . . . . . . . . . 298 interrupt 5 . . . . . . . . . . . . . . . . . . . . . 301 interrupt 6 . . . . . . . . . . . . . . . . . . . . . 305 rotary encoder . . . . . . . . . . . . . . . . . . 310 buzzer 1 . . . . . . . . . . . . . . . . . . . . . . . 317 boîte à musique . . . . . . . . . . . . . . . . . 319 cucaracha . . . . . . . . . . . . . . . . . . . . . . 323 fire detector . . . . . . . . . . . . . . . . . . . . 329
enarvuino_14x21IX.fm Page 341 Lundi, 18. février 2013 10:56 10
Index ! ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 1-Wire . . . . . . . . . 28, 164, 188, 321, 322 8048 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 8052 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
A À propos d’Arduino . . . . . . . . . . . . . . . 54 AC . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 accès direct à la mémoire . . . . . . . . . . 30 accumulateur lithium polymère . . . . 320 actionneur . . . . . . . . . . . . . . . . . . . . . 124 ADC . . . . . . . . . . . . . . . . . . . . . . . . . 115 ADCH . . . . . . . . . . . . . . . . . . . . . . . . 153 ADCL . . . . . . . . . . . . . . . . . . . . . . . . 153 ADCSRA . . . . . . . . . . . . . . . . . . . . . 153 ADCSRB . . . . . . . . . . . . . . . . . . . . . . 153 Add Library… . . . . . . . . . . . . . . . . . . . 51 ADMUX . . . . . . . . . . . . . . . . . . . . . . 153 Afficher le dossier des croquis . . . . . . 51 afficheur graphique couleur . . . . . . . 198 Aide pour débuter . . . . . . . . . . . . . . . . 53 Ajouter bibliothèque… . . . . . . . . . . . . 51 Ajouter un fichier… . . . . . . . . . . . . . . . 51 ALU . . . . . . . . . . . . . . . . . . . . . . . . . . 23 AM . . . . . . . . . . . . . . . . . . . . . . . . . . 237 amplitude modulation . . . . . . . . . . . . 237 analogRead . . . . . . . . . . . . 116, 132, 147 analogReference . . . . . . . . . . . . 116, 121 analog-to-digital converter . . . . . . . . 115 analogWrite . . . . . . . . . . . . 122, 235, 240 analyse de Fourier . . . . . . . . . . . . . . . 237 Andrew Tanenbaum . . . . . . . . . . . . . 157 Android . . . . . . . . . . . . . . . . . . . . . . . . 39
Annuler . . . . . . . . . . . . . . . . . . . . . . . . 49 antenne . . . . . . . . . . . . . . . . . . . . . . . . 238 API . . . . . . . . . . . . . . . . . . . . . . . . 54, 109 Application Programming Interface . . 54 Archiver le croquis . . . . . . . . . . . . . . . 52 Arduino . . . . . . . . . . . . . . . . . . . . . . . . 37 arduino.cc . . . . . . . . . . . . . . . . . . . . . . 39 arguments . . . . . . . . . . . . . . . . . . . . . . 58 ARM Cortex M3 . . . . . . . . . . . . . . 38, 41 array . . . . . . . . . . . . . . . . . . . . . . . . . 108 ASCII . . . . . . . . . . . . . . . . . 141, 167, 168 asm . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 assembleur . . . . . . . . . . . . . . . . . . . . . . 31 en ligne . . . . . . . . . . . . . . . . . . . . . 113 asymétrique . . . . . . . . . . . . . . . . . . . . 218 ATmega1280 . . . . . . . . . . . . . . . . . . . . 41 ATmega168 . . . . . . . . . . . . . . . . . . . . . 41 ATmega2560 . . . . . . . . . . . . . . . . . . . . 41 ATmega328 . . . . . . . . . . . . . . . . . . . . . 41 ATmega32U4 . . . . . . . . . . . . . . . . . . . 39 ATmega8 . . . . . . . . . . . . . . . . . . . . . . . 41 Atmel . . . . . . . . . . . . . . . . . . . . . 9, 22, 41 atof . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 atoi . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 atol . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 attachInterrupt . . . . . . . . . . . . . . 297, 300 Augmenter l’indentation . . . . . . . . . . . 50 Augustin d’Hippone . . . . . . . . . . . . . 221 automate . . . . . . . . . . . . . . . . . . . . . . 124 automate fini . . . . . . . . . . . . . . . . . . . 172 automatophones . . . . . . . . . . . . . . . . . 320 avertisseur sonore à cinq tons . . . . . . 319 AVR . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
341
enarvuino_14x21IX.fm Page 342 Lundi, 18. février 2013 10:56 10
Index
B BASIC . . . . . . . . . . . . . . . . . . . . . 31, 270 BCD . . . . . . . . . . . . . . . . . . . . . . . . . . 228 beginTransmission . . . . . . . . . . . . . . 189 Bessel . . . . . . . . . . . . . . . . . . . . . . . . 239 bibliothèque . . . . . . . . . . . . . . . . . . . . 160 binary coded decimal . . . . . . . . . . . . 228 biphase . . . . . . . . . . . . . . . . . . . . . . . . 249 bit de parité . . . . . . . . . . . . . . . . . . . . 166 bit-banging . . . . . . . . . . . . . . . . . . . . 199 bitClear . . . . . . . . . . . . . . . . . . . . . . . 275 bit_is_set . . . . . . . . . . . . . . . . . . . . . . 154 bitRead . . . . . . . . . . . . . . . . . . . . . . . . 94 bits d’arrêt . . . . . . . . . . . . . . . . . . . . . . 163 de départ . . . . . . . . . . . . . . . . . . . . 163 bitSet . . . . . . . . . . . . . . . . . . . . . . . . . 275 Blink . . . . . . . . . . . . . . . . . . . . . . . . . . 15 BO . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 BOD . . . . . . . . . . . . . . . . . . . . . . . . . 314 boolean . . . . . . . . . . . . . . . . . . . . . . . . 63 booléen . . . . . . . . . . . . . . . . . . . . . . . . 63 bootloader . . . . . . . . . . . . . . . . 33, 41, 56 BOR . . . . . . . . . . . . . . . . . . . . . . . . . . 314 boucle à phase asservie . . . . . . . . . . . . 24 bourrage de zéros . . . . . . . . . . . . . . . 183 break . . . . . . . . . . . . . . . . . . . . . . . . . 254 brown out . . . . . . . . . . . . . . . . . . . . . . . 26 detector . . . . . . . . . . . . . . . . . . . . . 314 reset . . . . . . . . . . . . . . . . . . . . . . . . 314 bus de communication sérielle . . . . . . 28 buzzer . . . . . . . . . . . . . . . . . . . . . . . . 316
C C, langage . . . . . . . . . . . . . . . . . . . 31, 57 C++ . . . . . . . . . . . . . . . . . . . . . . . . 32, 57 CAN (bus) . . . . . . . . . . . . . . . . . . 28, 164 CAN (convertisseur) . . . . . . . . . . 26, 115
342
capteur de pression . . . . . . . . . . . . . . . . . . . 189 de température . . . . . . . . . . . . . . . . 152 de température sans contact . . . . . . 329 capture . . . . . . . . . . . . . . . . . . . . . . . . 284 caractère . . . . . . . . . . . . . . . . . . . . . . . . 62 Carnet de croquis . . . . . . . . . . . . . . . . 47 carte d’extension . . . . . . . . . . . . . . . . . 40 case . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 cbi . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 CGPM . . . . . . . . . . . . . . . . . . . . . . . . 221 chaîne de caractères . . . . . . . . . . . . . . . 63 CHANGE . . . . . . . . . . . . . . . . . . . . . . 300 char . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 chargeur d’amorçage . . . . . . . . 33, 41, 56 charlieplexing . . . . . . . . . . . . . . . . . . . 78 chenillard . . . . . . . . . . . . . . . . . . . . . . . 92 chien de garde . . . . . . . . . . . . . . . 30, 314 Clear Timer on Compare match . . . . 284 CNA (convertisseur) . . . . . . . . . . 27, 122 codage de Manchester . . . . . . . . . . . . 163, 249 par modulation de position d’impulsion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 code exécutable . . . . . . . . . . . . . . . . . . 32 Coller . . . . . . . . . . . . . . . . . . . . . . . . . . 50 coloration syntaxique . . . . . . . . . . . . . . 64 COM0A0 . . . . . . . . . . . . . . . . . . . . . . 290 comma separated values . . . . . . . . . . 258 commentaires . . . . . . . . . . . . . . . . . . . . 63 imbriqués . . . . . . . . . . . . . . . . . . . . . 64 Commenter/Décommenter . . . . . . . . . . 50 communication asynchrone . . . . . . . . . . . . . . . . . . . 162 synchrone . . . . . . . . . . . . . . . . . . . . 164 comparateur analogique . . . . . . . 151, 284 compilateur . . . . . . . . . . . . . . . . . . . . . 32 Conférence générale des poids et mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21IX.fm Page 343 Lundi, 18. février 2013 10:56 10
Index constrain . . . . . . . . . . . . . . . . . . . . . . 143 continue . . . . . . . . . . . . . . . . . . . . . . . 254 contrôle de redondance cyclique . . . . 203 conversion de type de donnée . . . . . . 118 convertisseur analogique-numérique . . . . . . . 26, 115 numérique-analogique . . . . . . . 27, 122 Copier en tant qu’HTML . . . . . . . . . . 50 Copier pour le forum . . . . . . . . . . . . . 50 Couper . . . . . . . . . . . . . . . . . . . . . . . . . 49 CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 CR . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 CRC . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Créer une bibliothèque . . . . . . . . . . . 209 croquis . . . . . . . . . . . . . . . . . . . 46, 51, 60 CSV . . . . . . . . . . . . . . . . . . . . . . . . . . 258 CTC . . . . . . . . . . . . . . . . . . . . . . . . . . 284 cyclic redundancy check . . . . . . . . . . 203
D DAC . . . . . . . . . . . . . . . . . . . . . . . . . 122 Data Direction Register . . . . . . . . . . 110 DCF77 . . . . . . . . . . . . . . . . . . . . . . . . 222 DDR . . . . . . . . . . . . . . . . . . . . . . . . . 110 débogueur in situ . . . . . . . . . . . . . . . . . 34 débordement de la pile . . . . . . . . . . . 303 default . . . . . . . . . . . . . . . . . . . . . . . . . 68 delay . . . . . . . . . . . . . . . . . . 64, 132, 234 delayMicroseconds . . . . . . . . . . . . . . 234 Dépannage . . . . . . . . . . . . . . . . . . . . . 53 detachInterrupt . . . . . . . . . . . . . 297, 300 détecteur d’obscurité . . . . . . . . . . . . . . . . . . . 315 de son . . . . . . . . . . . . . . . . . . . . . . 278 Device Firmware Update . . . . . . . . . . 33 DFU . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 DI . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 DIDR0 . . . . . . . . . . . . . . . . . . . . . . . . 153
DIDR1 . . . . . . . . . . . . . . . . . . . . . . . . 153 DIDR2 . . . . . . . . . . . . . . . . . . . . . . . . 153 Diecimila . . . . . . . . . . . . . . . . . . . . 10, 40 différentielle . . . . . . . . . . . . . . . . . . . 135 digitalRead . . . . . . . . . . . . . . . . . . . . . 71 digital-to-analog converter . . . . . . . . 122 digitalWrite . . . . . . . . . . . . . . . . . . 64, 71 diviseur . . . . . . . . . . . . . . . . . . . 235, 241 division à virgule flottante . . . . . . . . . . . . . . 118 d’entiers . . . . . . . . . . . . . . . . . . . . . 118 DMA . . . . . . . . . . . . . . . . . . . . . . . . . . 30 DO . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Domenico Scarlatti . . . . . . . . . . . . . . 319 double . . . . . . . . . . . . . . . . . . . . . . . . . 62 do-while . . . . . . . . . . . . . . . . . . . . . 81, 82 DS18B20 . . . . . . . . . . . . . . . . . . . . . . 322 DS18S20 . . . . . . . . . . . . . . . . . . . . . . 322 Due . . . . . . . . . . . . . . . . . . . . . 38, 40, 41 Duemilanove . . . . . . . . . . . . . . . . . . . . 40
E EDI . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 éditeur de liens . . . . . . . . . . . . . . . . . . . 32 EEPROM . . . . . . . . . . . . . . . . . . . . . . . 22 EIA/TIA-232-E . . . . . . . . . . . . . . . . . 164 émetteur-récepteur asynchrone universel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 endTransmisison . . . . . . . . . . . . . . . . 189 Enregistrer . . . . . . . . . . . . . . . . . . . 46, 48 Enregistrer sous… . . . . . . . . . . . . . . . . 48 entrée-sortie à usage général . . . . . . . . 71 Environnement . . . . . . . . . . . . . . . . . . . 53 environnement de développement intégré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 EPROM . . . . . . . . . . . . . . . . . . . . . . . . 21 Erasable Programmable Read-Only Memory . . . . . . . . . . . . . . . . . . . . . . 21
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
343
enarvuino_14x21IX.fm Page 344 Lundi, 18. février 2013 10:56 10
Index escape sequence . . . . . . . . . . . . . . . . 262 ET . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Ethernet . . . . . . . . . . . . . . . . . . . . 28, 164 EUSART . . . . . . . . . . . . . . . . . . . . . . . 29 Exemples . . . . . . . . . . . . . . . . . . . . . . . 47 EXOR . . . . . . . . . . . . . . . . . . . . . . . . 184 exp . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 extensible mark-up language . . . . . . 258 extern . . . . . . . . . . . . . . . . . . . . . 273, 276
F FALLING . . . . . . . . . . . . . . . . . . . . . . 300 Fast PWM . . . . . . . . . . . . . . . . . . . . . 235 Fermer . . . . . . . . . . . . . . . . . . . . . . . . . 47 filtre numérique à réponse impulsionnelle infinie . . . . . . . . . . . . . . . . . . . . . . . 138 passe-bande . . . . . . . . . . . . . . . . . . 239 passe-bas . . . . . . . . . . . . . . . . . . . . 138 passe-haut . . . . . . . . . . . . . . . . . . . 138 firmware . . . . . . . . . . . . . . . . . . . . . . . 24 float . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Foire aux questions . . . . . . . . . . . . . . . 54 fonction . . . . . . . . . . . . . . . . . . . . . 58, 79 fondamental . . . . . . . . . . . . . . . . . . . . 237 for . . . . . . . . . . . . . . . . . . . . . . . . . 81, 82 Formatage automatique . . . . . . . . . . . 52 Fortran . . . . . . . . . . . . . . . . . . . . . . . . . 31 France Inter . . . . . . . . . . . . . . . . . . . . 222 Freeduino . . . . . . . . . . . . . . . . . . . . . . . 45 Freescale . . . . . . . . . . . . . . . . . . . . . . 197 fréquence d’échantillonnage . . . . . . . 132 FTDI . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
G General Purpose Input Output . . . 26, 71 GGA . . . . . . . . . . . . . . . . . . . . . . . . . 168 goto . . . . . . . . . . . . . . . . . . . . . . . . . . 269
344
GPIO . . . . . . . . . . . . . . . . . . . . . . . 26, 71 GPS . . . . . . . . . . . . . . . . . . . . . . . . . . 168 graphiques vectoriels . . . . . . . . . . . . . 258 Graver la séquence d’initialisation . . . 53
H harmoniques . . . . . . . . . . . . . . . . . . . . 237 HD44780 . . . . . . . . . . . . . . . . . . . . . . 159 Hello World . . . . . . . . . . . . . . . . . . 14, 57 HIGH . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Hitachi . . . . . . . . . . . . . . . . . . . . . . . . 159 Hope RF . . . . . . . . . . . . . . . . . . . . . . . 189 horloge . . . . . . . . . . . . . . . . . . . . . . . . . 24 atomique . . . . . . . . . . . . . . . . . . . . . 221 HP03 . . . . . . . . . . . . . . . . . . . . . . . . . 189 hypot . . . . . . . . . . . . . . . . . . . . . . . . . 144
I I²C . . . . . . . . . . . . . . . . 28, 164, 187, 329 I²S . . . . . . . . . . . . . . . . . . . . . 28, 164, 220 ICR . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 ICSP . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 if-else . . . . . . . . . . . . . . . . . . . . . . . 59, 66 IIR . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 imbriquer des interruptions . . . . . . . . 302 Importer bibliothèque… . . . . . . . . . 51, 52 Imprimer . . . . . . . . . . . . . . . . . . . . . . . 48 In-Circuit Serial Programming . . . . . . 33 indexOf . . . . . . . . . . . . . . . . . . . . . . . . 175 infinite impulse response . . . . . . . . . . 138 Inkscape . . . . . . . . . . . . . . . . . . . . . . . 258 INPUT . . . . . . . . . . . . . . . . . . . . . . . . . 61 Input Capture Register . . . . . . . . . . . 241 INPUT_PULLUP . . . . . . . . . . . . . . 61, 73 In-System Programming . . . . . . . . . . . 33 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 int8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21IX.fm Page 345 Lundi, 18. février 2013 10:56 10
Index intégrale . . . . . . . . . . . . . . . . . . . . . . . 135 Intel . . . . . . . . . . . . . . . . . . . . . . . 21, 329 Inter Integrated Circuits . . . . . . . . . . 187 interface de programmation applicative . . . . . . . . . . . . . . . . . . . . . . . . . 54, 109 interrupt nesting . . . . . . . . . . . . . . . . 302 interrupt service routine . . . . . . . . . . 292 interruptions . . . . . . . . . . . . . . . . 25, 287 interrupts . . . . . . . . . . . . . . . . . . . . . . 297 INTx . . . . . . . . . . . . . . . . . . . . . . . . . 300 IrDA . . . . . . . . . . . . . . . . . . . . . . 28, 164 ISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ISR . . . . . . . . . . . . . . . . . . . . . . 273, 292
J Jean-Baptiste de La Quintinie . . . . . . 109 Joint Test Action Group . . . . . . . . . . . 30 journal lumineux défilant . . . . . . . . . . 95 JTAG . . . . . . . . . . . . . . . 28, 30, 164, 314
K kibi . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 klaxon italien . . . . . . . . . . . . . . . . . . . 319
L langage de balisage extensible . . . . . 258 latitude . . . . . . . . . . . . . . . . . . . . . . . . 175 LCD . . . . . . . . . . . . . . . . . . . . . . . . . . 159 LDR . . . . . . . . . . . . . . . . . . . . . . . . . . 316 LED infrarouge . . . . . . . . . . . . . . . . . 271 Léonardo . . . . . . . . . . . . . . . . . . . . . . . 39 LF . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 light dependent resistor . . . . . . . . . . . 316 Lilypad . . . . . . . . . . . . . . . . . . . . . . . . 39 LIN . . . . . . . . . . . . . . . . . . . . . . . 28, 164 Linker . . . . . . . . . . . . . . . . . . . . . . . . . 32 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Li-Po . . . . . . . . . . . . . . . . . . . . . . . . . 320 LiquidCrystal . . . . . . . . . . . . . . . . . . . 160 longitude . . . . . . . . . . . . . . . . . . . . . . 175 loop . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 LOW . . . . . . . . . . . . . . . . . . . . . . . 64, 300
M M2M . . . . . . . . . . . . . . . . . . . . . . . . . 157 MA . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Mac OS X . . . . . . . . . . . . . . . . . . . . . . 13 machine-to-machine . . . . . . . . . . . . . 157 macros . . . . . . . . . . . . . . . . . . . . 291, 327 main . . . . . . . . . . . . . . . . . . . . . . . 60, 315 mark . . . . . . . . . . . . . . . . . . . . . . 165, 272 Math . . . . . . . . . . . . . . . . . . . . . . . . . . 144 math.h . . . . . . . . . . . . . . . . . . . . . . . . 144 Maxim . . . . . . . . . . . . . . . . . . . . 188, 322 MCS-48 . . . . . . . . . . . . . . . . . . . . . . . . 21 MCS-51 . . . . . . . . . . . . . . . . . . . . . . . . 21 MCU . . . . . . . . . . . . . . . . . . . . . . . . . . 21 MCUSR . . . . . . . . . . . . . . . . . . . . . . . 314 Mega . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Mega ADK . . . . . . . . . . . . . . . . . . . . . 39 Mega 1280 . . . . . . . . . . . . . . . . . . . . . . 40 Mega 2560 . . . . . . . . . . . . . . . . . . . . . . 40 megaAVR . . . . . . . . . . . . . . . . . . . . . . 41 Melexis . . . . . . . . . . . . . . . . . . . . . . . 329 mémoire flash . . . . . . . . . . . . . . . . . . . . . . . . . 24 morte . . . . . . . . . . . . . . . . . . . . . . . . 21 ROM effaçable . . . . . . . . . . . . . . . . 21 vive . . . . . . . . . . . . . . . . . . . . . . . . . 21 zombie . . . . . . . . . . . . . . . . . . . . 22, 24
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
345
enarvuino_14x21IX.fm Page 346 Lundi, 18. février 2013 10:56 10
Index menu Aide . . . . . . . . . . . . . . . . . . . . . . . . . 53 Croquis . . . . . . . . . . . . . . . . . . . . . . 51 des onglets . . . . . . . . . . . . . . . . . . . . 54 Édition . . . . . . . . . . . . . . . . . . . . . . . 49 Fichier . . . . . . . . . . . . . . . . . . . . . . . 47 Outils . . . . . . . . . . . . . . . . . . . . . . . . 52 méthode . . . . . . . . . . . . . . . . . . . . . . . . 58 micro (-contrôleur) . . . . . . . . . . . . . . . 21 Micro (modèle de carte) . . . . . . . . . . . 40 Microchip . . . . . . . . . . . . . . . . . . . . . . 22 microcontrôleur . . . . . . . . . . . . . . . . . . 21 micrologiciel . . . . . . . . . . . . . . . . . . . . 24 micros . . . . . . . . . . . . . . . . . . . . 224, 234 Microwire . . . . . . . . . . . . . . . . . . 28, 197 Microwire/Plus . . . . . . . . . . . . . . . . . 197 millis . . . . . . . . . . . . . . . . . . 98, 224, 234 Mini . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Mise en page . . . . . . . . . . . . . . . . . . . . 48 MISO . . . . . . . . . . . . . . . . . . . . . . . . . 196 misophonie . . . . . . . . . . . . . . . . . . . . 145 MLI . . . . . . . . . . . . . . . . . . . . . . . 27, 122 à phase correcte . . . . . . . . . . . . . . . 235 rapide . . . . . . . . . . . . . . . . . . . . . . . 235 MLX90614 . . . . . . . . . . . . . . . . . . . . 329 modulation d’amplitude . . . . . . . . . . . . . . . . . . 237 de largeur d’impulsion . . . . . . . 27, 122 Moniteur série . . . . . . . . . . . . . . . . . . . 77 Moniteur série . . . . . . . . . . . . . 46, 53, 77 monome . . . . . . . . . . . . . . . . . . . . . . . . 40 MOSI . . . . . . . . . . . . . . . . . . . . . . . . . 196 Motorola . . . . . . . . . . . . . . . . . . . . . . 197 MSF . . . . . . . . . . . . . . . . . . . . . . . . . . 222 µC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 multiplexeur . . . . . . . . . . . . . . . . . . . . 26 multitâche . . . . . . . . . . . . . . . . . . . . . 313 µWire . . . . . . . . . . . . . . . . . . . . . . . . . 197
346
N NAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 NEC-1 . . . . . . . . . . . . . . . . . . . . . . . . 263 nested comments . . . . . . . . . . . . . . . . . 64 NMEA 0183A . . . . . . . . . . . . . . . . . . 168 NMI . . . . . . . . . . . . . . . . . . . . . . . . . . 298 noInterrupts . . . . . . . . . . . . . . . . . . . . 297 Nokia 6100 . . . . . . . . . . . . . . . . . . . . . 198 nombre à virgule flottante . . . . . . . . . . . . . . . 62 entier . . . . . . . . . . . . . . . . . . . . . . . . 62 NON . . . . . . . . . . . . . . . . . . . . . . . . . . 133 non signé . . . . . . . . . . . . . . . . . . . . . . . 63 NON-ET . . . . . . . . . . . . . . . . . . . . . . 133 non-maskable interrupt . . . . . . . . . . . 298 NON-OU . . . . . . . . . . . . . . . . . . . . . . 133 Not a Number . . . . . . . . . . . . . . . . . . . . 59 noTone . . . . . . . . . . . . . . . . . . . . . . . . 147 Nouveau . . . . . . . . . . . . . . . . . . . . . 46, 47 numérisation . . . . . . . . . . . . . . . . . . . 115
O OCIE0A . . . . . . . . . . . . . . . . . . . . . . . 291 OCR . . . . . . . . . . . . . . . . . . . . . . . . . . 241 OCR0A . . . . . . . . . . . . . . . . . . . . . . . 291 OCRxA . . . . . . . . . . . . . . . . . . . . . . . 240 Optiboot . . . . . . . . . . . . . . . . . . . . . . . 315 orgue de Barbarie . . . . . . . . . . . . . . . . 320 oscillateur . . . . . . . . . . . . . . . . . . . . . . . 24 OU . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 OU exclusif . . . . . . . . . . . . . . . . 184, 245 OUTPUT . . . . . . . . . . . . . . . . . . . . . . . 61 Output Compare Register . . . . . . . . . 241 Ouvrir . . . . . . . . . . . . . . . . . . . . . . 46, 47
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21IX.fm Page 347 Lundi, 18. février 2013 10:56 10
Index
P Packet Error Checking . . . . . . . . . . . 329 Pandore . . . . . . . . . . . . . . . . . . . . . . . 332 partie commande . . . . . . . . . . . . . . . . . . . 124 opérative . . . . . . . . . . . . . . . . . . . . 124 Pascal . . . . . . . . . . . . . . . . . . . . . . . . . 31 PB5 . . . . . . . . . . . . . . . . . . . . . . . . . . 111 PCIE0 . . . . . . . . . . . . . . . . . . . . . . . . 306 PCIFR . . . . . . . . . . . . . . . . . . . . . . . . 306 PCINTx . . . . . . . . . . . . . . . . . . . 300, 304 PCMSK0 . . . . . . . . . . . . . . . . . . . . . . 305 PCMSK1 . . . . . . . . . . . . . . . . . . . . . . 305 PCMSK2 . . . . . . . . . . . . . . . . . . . . . . 305 PCMSKx . . . . . . . . . . . . . . . . . . . . . . 305 PEC . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Phase Correct PWM . . . . . . . . . . . . . 235 photorésistance . . . . . . . . . . . . . . . . . 316 PIC16C84 . . . . . . . . . . . . . . . . . . . . . . 22 PID . . . . . . . . . . . . . . . . . . . . . . . . . . 125 pile (mémoire) . . . . . . . . . . . . . . . . . . 303 pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 change interrupt flag register . . . . 306 change mask . . . . . . . . . . . . . . . . . 305 change . . . . . . . . . . . . . . . . . . . . . . 300 Pindare . . . . . . . . . . . . . . . . . . . . . . . 332 pinMode . . . . . . . . . . . . . . . . . . . . 61, 71 PINx . . . . . . . . . . . . . . . . . . . . . . . . . 111 PLL . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 PMbus . . . . . . . . . . . . . . . . . . . . . . . . 187 pointeurs . . . . . . . . . . . . . . . . . . . . . . 173 pont en H . . . . . . . . . . . . . . . . . . . . . . 127 POR . . . . . . . . . . . . . . . . . . . . . . . . . . 314 port parallèle . . . . . . . . . . . . . . . . . . . . . 158 série . . . . . . . . . . . . . . . . . . . . . 53, 165 PORTB . . . . . . . . . . . . . . . . . . . . . . . 111 ports . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
PORTx . . . . . . . . . . . . . . . . . . . . . . . . 111 pow . . . . . . . . . . . . . . . . . . . . . . . . . . 143 power-on reset . . . . . . . . . . . . . . . . . . 314 prédiviseur . . . . . . . . . . . . . . . . . . . . . . 29 Préférences . . . . . . . . . . . . . . . . . . . . . 48 prescaler . . . . . . . . . . . . . . . 29, 235, 241 printf . . . . . . . . . . . . . . . . . . . . . . . . . 150 processeur . . . . . . . . . . . . . . . . . . . 23, 53 Processing . . . . . . . . . . . . . . . . . . . . . . 37 Programmateur . . . . . . . . . . . . . . . . . . 53 programmation in situ . . . . . . . . . . . . . 33 proportionnelle, réponse . . . . . . . . . . 135 prototype d’une fonction . . . . . . . . . . 209 pull-down . . . . . . . . . . . . . . . . . . . . . . . 73 pull-up . . . . . . . . . . . . . . . . . . . . . . . . . 73 pulse width modulation . . . . . . . . . . . 122 pulseIn . . . . . . . . . . . . . . . . . . . . 248, 284 PWM . . . . . . . . . . . . . . . . . . . . . . . . . 122
Q QSPI . . . . . . . . . . . . . . . . . . . . . . . . . 197 quantification . . . . . . . . . . . . . . . . . . . 115 quartz . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Quitter . . . . . . . . . . . . . . . . . . . . . . . . . 49
R RAM . . . . . . . . . . . . . . . . . . . . . . . . . . 21 random . . . . . . . . . . . . . . . . . . . . 105, 318 Random Access Memory . . . . . . . . . . . 21 randomSeed . . . . . . . . . . . . . . . . 105, 318 rapport signal-bruit . . . . . . . . . . . . . . 255 RAZ . . . . . . . . . . . . . . . . . . . . . . . 26, 314 RC5 . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Read-Modify-Write . . . . . . . . . . . . . . 111 Read-Only Memory . . . . . . . . . . . . . . . 21 Réduire l’indentation . . . . . . . . . . . . . . 50 Référence . . . . . . . . . . . . . . . . . . . . . . . 54
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
347
enarvuino_14x21IX.fm Page 348 Lundi, 18. février 2013 10:56 10
Index registre à décalage . . . . . . . . . . . . . . . 200, 275 de direction de données . . . . . . . . . 110 régulateur PID . . . . . . . . . . . . . . . . . . . . . . . . . 134 proportionnel intégral dérivé . . . . . 125 Réparer encodage et recharger . . . . . . 52 réponse indicielle . . . . . . . . . . . . . . . . 125 requestFrom . . . . . . . . . . . . . . . . . . . 189 réseau RC . . . . . . . . . . . . . . . . . . . . . . 24 reset . . . . . . . . . . . . . . . . . . . . . . . 26, 314 résistances de rappel . . . . . . . . . . . . . . 73 internes . . . . . . . . . . . . . . . . . . . . . . 73 résonateur . . . . . . . . . . . . . . . . . . . . . . 24 Rétablir . . . . . . . . . . . . . . . . . . . . . . . . 49 retour chariot . . . . . . . . . . . . . . . . . . . 168 return . . . . . . . . . . . . . . . . . . . . . . . . . . 59 RISING . . . . . . . . . . . . . . . . . . . . . . . 300 ROM . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ronfleur . . . . . . . . . . . . . . . . . . . . . . . 315 routine d’interruption . . . . . . . . . . . . 288 RS-232 . . . . . . . . . . . . . . . . . . . . . 28, 164 RS-422 . . . . . . . . . . . . . . . . . . . . . . . . 218 RS-485 . . . . . . . . . . . . . . . . . . . . . . . . 218
S Saint Augustin . . . . . . . . . . . . . . . . . . 285 SAM3X8E . . . . . . . . . . . . . . . . . . . . . . 41 SATA . . . . . . . . . . . . . . . . . . . . . . . . 158 saut de ligne . . . . . . . . . . . . . . . . . . . . 168 sbi . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 scalable vector graphics . . . . . . . . . . 258 SCK . . . . . . . . . . . . . . . . . . . . . . . . . . 187 SDA . . . . . . . . . . . . . . . . . . . . . . . . . . 187 SDI . . . . . . . . . . . . . . . . . . . . . . . . . . 196 SDO . . . . . . . . . . . . . . . . . . . . . . . . . . 196 seconde (unité de temps) . . . . . . . . . . 221 séquence d’échappement . . . . . . . . . . 262
348
Serial Monitor . . . . . . . . . . . . . . . . . . . 77 Serial.available . . . . . . . . . . . . . 144, 167 Serial.begin . . . . . . . . . . . . . . . . . 77, 167 Serial.end . . . . . . . . . . . . . . . . . . . . . . 167 Serial.find . . . . . . . . . . . . . . . . . . 169, 172 Serial.parseFloat . . . . . . . . . . . . . . . . 170 Serial.parseInt . . . . . . . . . . . . . . . . . . 170 Serial.peek . . . . . . . . . . . . . . . . . . . . . 144 Serial.print . . . . . . . . . . . . . . . . . 151, 167 Serial.println . . . . . . . . . . . . . . . . 77, 167 Serial.read . . . . . . . . . . . . . . . . . 144, 167 Serial.write . . . . . . . . . . . . . . . . . . . . . 167 setup . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 shield . . . . . . . . . . . . . . . . . . . . . . . 40, 41 SIGNAL . . . . . . . . . . . . . . . . . . . . . . . 291 signal de remise à zéro . . . . . . . . . 26, 314 SIGNAL(TIMER0_COMPA_vect) . . . 291 SIGNAL(TIMER0_OVF_vect) . . . . . . 289 simulateur de micro . . . . . . . . . . . . . . . 34 SIRCS . . . . . . . . . . . . . . . . . . . . . . . . 263 SISO . . . . . . . . . . . . . . . . . . . . . . . . . . 197 sketch . . . . . . . . . . . . . . . . . . . . 46, 51, 60 SMBus . . . . . . . . . . . . . . . . . . . . 187, 329 somme de contrôle . . . . . . . . . . . . . . . 183 space . . . . . . . . . . . . . . . . . . . . . 165, 272 spaghetti code . . . . . . . . . . . . . . . . . . 270 spectre . . . . . . . . . . . . . . . . . . . . . . . . 237 SPI . . . . . . . . . . . . . . . . . . . . 28, 164, 196 sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 SSI . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 SSP . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 stack . . . . . . . . . . . . . . . . . . . . . . . . . . 303 stack overflow . . . . . . . . . . . . . . . . . . 303 startsWith . . . . . . . . . . . . . . . . . . . . . . 177 static . . . . . . . . . . . . . . . . . . . . . . . . . . 290 strcat . . . . . . . . . . . . . . . . . . . . . . . . . 173 strcmp . . . . . . . . . . . . . . . . . . . . . . . . 173 strcpy . . . . . . . . . . . . . . . . . . . . . . . . . 173
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
enarvuino_14x21IX.fm Page 349 Lundi, 18. février 2013 10:56 10
Index Stream . . . . . . . . . . . . . . . . . . . . . . . . 178 String . . . . . . . . . . . . . . . . . . . . . . 63, 173 strlen . . . . . . . . . . . . . . . . . . . . . . . . . 173 strstr . . . . . . . . . . . . . . . . . . . . . . . . . 173 struct . . . . . . . . . . . . . . . . . . . . . . . . . 256 substring . . . . . . . . . . . . . . . . . . . . . . 175 SVG . . . . . . . . . . . . . . . . . . . . . . . . . . 258 switch . . . . . . . . . . . . . . . . . . . . . . . . . 68 switch-case-default . . . . . . . . . . . . . . . 68 symétrique . . . . . . . . . . . . . . . . . . . . . 218 System Management Bus . . . . . . . . . . 329 système automatisé . . . . . . . . . . . . . . . . . . . 124 en boucle ouverte . . . . . . . . . . . . . 125
T tableaux . . . . . . . . . . . . . . . . . . . . . . . 108 TCCR0A . . . . . . . . . . . . . . . . . . . . . . 290 TCCRxA . . . . . . . . . . . . . . . . . . . . . . 240 TCCRxB . . . . . . . . . . . . . . . . . . . . . . 240 Téléverser . . . . . . . . . . . . . . . . . . . 46, 48 avec un programmateur . . . . . . . . . 48 tension de référence . . . . . . . . . . . . . 116 TeraTerm . . . . . . . . . . . . . . . . . . . . . . 232 Texas Instruments . . . . . . . . . . . . . . . . 21 TI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 timeout . . . . . . . . . . . . . . . . . . . . . . . 248 _timer . . . . . . . . . . . . . . . . . . . . . . . . 272 Timer/Counter Control Register . . . . 241 TIMER2_COMPA_vect . . . . . . . . . . . 273 timer2_toggle_count . . . . . . . . . . . . . 273 TMS1802NC . . . . . . . . . . . . . . . . . . . . 21 toggle . . . . . . . . . . . . . . . . . . . . . . . . . 112 toInt . . . . . . . . . . . . . . . . . . . . . . . . . . 178 tone . . . . . . . . . . . . . . . . . . 147, 240, 272 Tone.cpp . . . . . . . . . . . . . . . . . . . . . . 272
touche fantôme . . . . . . . . . . . . . . . . . . . . . . 87 masquée . . . . . . . . . . . . . . . . . . . . . . 88 Tout sélectionner . . . . . . . . . . . . . . . . . 50 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Trigonometry . . . . . . . . . . . . . . . . . . . 144 Trouver . . . . . . . . . . . . . . . . . . . . . . . . 50 dans la référence . . . . . . . . . . . . . . . 54 précédent . . . . . . . . . . . . . . . . . . . . . 50 prochain . . . . . . . . . . . . . . . . . . . . . . 50 TSOP1736 . . . . . . . . . . . . . . . . . . . . . 251 TSOP34836 . . . . . . . . . . . . . . . . . . . . 251 TTL . . . . . . . . . . . . . . . . . . . . . . . . . . 165 TWI . . . . . . . . . . . . . . . . . . . 28, 187, 329 Two-Wire . . . . . . . . . . . . . . . . . . . . . 188 Interface . . . . . . . . . . . . . . . . . . . . . 187 Type de carte . . . . . . . . . . . . . . . . . . . . 53 typecast . . . . . . . . . . . . . . . . . . . . . . . 118 typedef . . . . . . . . . . . . . . . . . . . . . . . . 257
U UAL . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 UART . . . . . . . . . . . . . . . . . . . . . 29, 166 uC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 UFm . . . . . . . . . . . . . . . . . . . . . . . . . . 187 uint32 . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Ultra Fast-mode . . . . . . . . . . . . . . . . 187 undefined reference . . . . . . . . . . . 60, 273 union . . . . . . . . . . . . . . . . . . . . . . . . . 256 unité arithmétique et logique . . . . . . . . . . 23 centrale de traitement . . . . . . . . . . . . 23 Universal Asynchronous Receiver/ Transmitter . . . . . . . . . . . . . . . . . . 166 Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 unsigned . . . . . . . . . . . . . . . . . . . . . . . . 63 USART . . . . . . . . . . . . . . . . . . . . 29, 166 USART0_RX_vect . . . . . . . . . . . . . . . 292 USART0_UDRE_vect . . . . . . . . . . . . 292
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3
349
enarvuino_14x21IX.fm Page 350 Lundi, 18. février 2013 10:56 10
Index USB . . . . . . . . . . . . . . . . . . . . . . . 28, 164 Utiliser la sélection pour trouver . . . . 50
V variable globale . . . . . . . . . . . . . . . . . . . . . . . 62 locale . . . . . . . . . . . . . . . . . . . . . . . . 62 vecteurs . . . . . . . . . . . . . . . . . . . . . . . 288 Vérifier . . . . . . . . . . . . . . . . . . . . . . . . 46 Vérifier / Compiler . . . . . . . . . . . . . . . 51 Vishay . . . . . . . . . . . . . . . . . . . . . . . . 251 Visiter Arduino.cc . . . . . . . . . . . . . . . . 54 void . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 volatile . . . . . . . . . . . . . . . . . . . . . . . . 276
W watchdog . . . . . . . . . . . . . . . . . . . 30, 314 Waveform Generation Mode . . . . . . . 241 wearable . . . . . . . . . . . . . . . . . . . . . . . 40 WGM . . . . . . . . . . . . . . . . . . . . . . . . . 241 WGM00 . . . . . . . . . . . . . . . . . . . . . . . 290 while . . . . . . . . . . . . . . . . . . . . . . . 81, 82 Windows Vista . . . . . . . . . . . . . . . . . . 13 Windows 7 . . . . . . . . . . . . . . . . . . . . . . 13
350
Windows XP . . . . . . . . . . . . . . . . . . . . 12 Wire . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Wiring . . . . . . . . . . . . . . . . . . . . . . . . . 37 Wiring S . . . . . . . . . . . . . . . . . . . . . . . . 38 wiring.c . . . . . . . . . . . . . . . . . . . 289, 290 wiring_analog.c . . . . . . . . . . . . . . . . . 152 www.arduino.cc . . . . . . . . . . . . . . . . 9, 37 www.freeduino.org . . . . . . . . . . . . . . . 45 www.ftdichip.com . . . . . . . . . . . . . . . . 14 www.inkscape.org . . . . . . . . . . . . . . . 258 www.misophonia-uk.org . . . . . . . . . . 145 www.monome.org . . . . . . . . . . . . . . . . 40 www.polyvalens.com . . . . . . . . . . . . . . 1 www.processing.org . . . . . . . . . . . . . . 37 www.wiring.org.co . . . . . . . . . . . . . . . 37
X XML . . . . . . . . . . . . . . . . . . . . . . . . . 258
Z zero padding . . . . . . . . . . . . . . . . . . . 183 Ziegler-Nichols . . . . . . . . . . . . . 125, 138
Maîtrisez les microcontrôleurs à l'aide d'Arduino - C. Valens Copyright Elektor International Media - ISBN 978-2-86661-190-3