X. Projet 2 : faire clignoter une LED▲
Comme premier programme, nous allons faire clignoter une LED D1 , connectée sur la broche 13. Voici le schéma de câblage :
Liste des composants
- 1 LED ;
- 1 résistance de 220 à 470 Ω ;
- 2 câbles.
X-A. Le logiciel Arduino IDE▲
La programmation se fait dans le logiciel Arduino IDE :
Le menu
- Bouton 1 : ce bouton permet de vérifier le programme, il actionne un module qui cherche les erreurs dans le programme ;
- Bouton 2 : envoi du programme sur l'Arduino ;
- Bouton 3 : créer un nouveau fichier ;
- Bouton 4 : ouvrir un fichier existant ;
- Bouton 5 : enregistrer un fichier.
Commençons tout de suite par un petit code. Nous l'analyserons ensuite.
Une fois le code écrit (ou collé) dans la fenêtre de programmation, il faut l'envoyer sur l'Arduino. Pour cela, après avoir connecté l'Arduino à l'ordinateur, il faut sélectionner le port (tty_usbmodemXXXXX) et le type de carte (Arduino Uno, dans notre cas). Ces deux réglages sont dans le menu Outils.
Cliquer enfin sur le bouton téléverser (upload).
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
/*
Code 1 - Edurobot.ch, destiné à l'Arduino
Objectif: faire clignoter la LED montée sur la broche 13
*/
//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et une seule fois, au démarrage du programme
void
setup() // début de la fonction setup()
{
pinMode
(13
, OUTPUT
); // Initialise la broche 13 comme sortie
Serial
.begin(9600
); // Ouvre le port série à 9600 bauds
}
// fin de la fonction setup()
//***** FONCTION LOOP = Boucle sans fin = cœur du programme *****
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void
loop() // début de la fonction loop()
{
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(500
); // Pause de 500 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(500
); // Pause 500 ms
}
// fin de la fonction loop()
Observations
Ce code permet de faire clignoter la LED D1 située sur la broche 13. Une LED, soudée sur l'Arduino et reliée à la broche 13 clignote elle aussi. La résistante R1 de 220 Ω sert à abaisser la tension et éviter que la LED ne grille.
Déboguer
Il y a de nombreuses erreurs possibles dans un programme Arduino. La lecture et la compréhension de ces erreurs dans Arduino IDE ne sont pas évidentes. Vous trouverez de précieux conseils ici :
Introduction au code
Le déroulement du programme
Le programme se déroule de la façon suivante :
- Prise en compte des instructions de la partie déclarative ;
- Exécution de la partie configuration (fonction setup()) ;
- Exécution de la boucle sans fin (fonction loop()) : le code compris dans la boucle sans fin est exécuté indéfiniment.
Nous verrons petit à petit les divers éléments présents dans le schéma. L'important pour le moment est de savoir qu'un programme est divisé en trois parties : en-tête déclaratif, fonction setup et fonction loop.
La suite va nous permettre d'entrer dans le code minimal : les fonctions setup et .
Le code minimal
Avec Arduino, nous devons utiliser un code minimal lorsqu'on crée un programme. Ce code permet de diviser le programme en deux parties.
2.
3.
4.
5.
6.
void
setup()
{
}
void
loop()
{
}
Nous avons donc devant nous le code minimal qu'il faut insérer dans notre programme. Mais que peut-il bien signifier pour quelqu'un qui n'a jamais programmé ?
La fonction
Dans le code 1 se trouvent deux fonctions. Les fonctions sont en fait des portions de code.
Première fonction :
2.
3.
void
setup()
{
}
Cette fonction setup() est appelée une seule fois lorsque le programme commence. C'est pourquoi c'est dans cette fonction que l'on va écrire le code qui n'a besoin d'être exécuté qu'une seule fois. On appelle cette fonction : « fonction d'initialisation ». On y retrouvera la mise en place des différentes sorties et quelques autres réglages.
Une fois que l'on a initialisé le programme, il faut ensuite créer son « cœur », autrement dit le programme en lui-même.
Deuxième fonction :
2.
3.
void
loop()
{
}
C'est donc dans cette fonction loop() que l'on va écrire le contenu du programme. Il faut savoir que cette fonction est appelée en permanence, c'est-à-dire qu'elle est exécutée une fois, puis lorsque son exécution est terminée, elle est exécutée à nouveau, encore et encore. On parle de boucle infinie.
Les instructions
Maintenant que nous avons vu la structure des fonctions, regardons ce qu'elles peuvent contenir.
Les instructions sont des lignes de code qui disent au programme : « fais ceci, fais cela… » Ce sont donc les ordres qui seront exécutés par l'Arduino. Il est très important de respecter exactement la syntaxe ; faute de quoi, le code ne pourra pas être exécuté.
Les points-virgules ;
Les points-virgules terminent les instructions. Si par exemple on dit dans notre programme : « appelle la fonction mangerLeChat », on doit mettre un point-virgule après l'appel de cette fonction.
Lorsque le code ne fonctionne pas, c'est souvent parce qu'il manque un point-virgule. Il faut donc être très attentif à ne pas les oublier !
Les accolades { }
Les accolades sont les « conteneurs » du code du programme. Elles sont propres aux fonctions, aux conditions et aux boucles. Les instructions du programme sont écrites à l'intérieur de ces accolades.
Pour ouvrir une accolade sur Mac, taper alt-8 et alt-9 pour la fermer.
Les commentaires
Les commentaires sont des lignes de code qui seront ignorées par le programme. Elles ne servent à rien lors de l'exécution du programme. Ils permettent d'annoter et de commenter le programme.
Ligne unique de commentaire :
//cette ligne est un commentaire sur UNE SEULE ligne
Ligne ou paragraphe sur plusieurs lignes :
2.
/*cette ligne est un commentaire, sur PLUSIEURS lignes
qui sera ignoré par le programme, mais pas par celui qui lit le code ;) */
Les accents
Il est formellement interdit de mettre des accents en programmation ! Sauf dans les commentaires…
Analyse du code 1
Revenons maintenant à notre code.
- La ligne
pinMode
(13
,OUTPUT
); initialise la broche 13 du microcontrôleur comme sortie, c'est-à-dire que des données seront envoyées depuis le microcontrôleur vers cette broche (on va « envoyer » de l'électricité). - La ligne
Serial
.begin(9600
); initialise le port série qui permet à l'Arduino d'envoyer et de recevoir des informations à l'ordinateur. C'est recommandé, mais cela fonctionne aussi sans. - Avec l'instruction
digitalWrite
(13
,HIGH
);, le microcontrôleur connecte la broche D13 au +5 V ce qui a pour effet d'allumer la LED (de l'électricité « sort » de la broche D13). - L'instruction
delay
(500
); indique au microcontrôleur de ne rien faire pendant 500 millisecondes, soit ½ seconde. - Avec l'instruction
digitalWrite
(13
,LOW
);, le microcontrôleur connecte la broche D13 à la masse (Gnd) ce qui a pour effet d'éteindre la LED (on coupe l'alimentation en électricité). - L'instruction
delay
(500
); indique au microcontrôleur à nouveau de ne rien faire pendant 500 ms soit ½ seconde. - Le résultat est donc que la LED s'allume pendant ½ seconde, puis s'éteint pendant une ½ seconde puis s'allume pendant ½ seconde… Elle clignote donc.
Profitons maintenant pour voir ce que signifie le terme Output. Il s'agit de préciser si la broche est une entrée ou une sortie. En effet, le microcontrôleur a la capacité d'utiliser certaines de ses broches en entrée (INPUT) ou en sortie (OUTPUT). Il suffit d'interchanger une ligne de code pour dire qu'il faut utiliser une broche en entrée (NDLR. Broche en « lecture ») ou en sortie (NDLR. Broche en « écriture »).
Cette ligne de code doit se trouver dans la fonction setup(). La fonction est pinMode
(), comme dans l'exemple ci-dessous :
2.
3.
4.
5.
void
setup()
{
pinMode
(13
, OUTPUT
);
Serial
.begin(9600
);
}
Modifions le code
Faisons varier les valeurs de l'instruction delay
() et modifions le code selon les exemples ci-dessous.
2.
3.
4.
digitalWrite
(13
, HIGH
);
delay
(50
);
digitalWrite
(13
, LOW
);
delay
(50
);
2.
3.
4.
digitalWrite
(13
, HIGH
);
delay
(500
);
digitalWrite
(13
, LOW
);
delay
(2000
);
2.
3.
4.
5.
6.
7.
8.
digitalWrite
(13
, HIGH
);
delay
(50
);
digitalWrite
(13
, LOW
);
delay
(50
);
digitalWrite
(13
, HIGH
);
delay
(1000
);
digitalWrite
(13
, LOW
);
delay
(1000
);
X-A-1. Exercice : lancer un SOS▲
|
/*
Exercice Code SOS - Edurobot.ch, destiné à l'Arduino
Objectif: faire clignoter la LED montée sur la broche 13 pour lancer un SOS
*/
//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et une seule fois, au démarrage du programme
void
setup() // début de la fonction setup()
{
pinMode
(13
, OUTPUT
); // Initialise la broche 13 comme sortie
Serial
.begin(9600
); // Ouvre le port série à 9600 bauds
}
// fin de la fonction setup()
//***** FONCTION LOOP = Boucle sans fin = cœur du programme *****
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void
loop() // début de la fonction loop()
{
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(200
); // Pause de 200 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(200
); // Pause de 200 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); //Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(200
); // Pause de 200 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(600
); // Pause de 600ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(600
); // Pause de 600 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(600
); // Pause de 600 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(200
); // Pause de 200 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(200
); // Pause de 200 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200ms
digitalWrite
(13
, HIGH
); // Met la broche 13 au niveau haut = allume la LED
delay
(200
); // Pause de 200 ms
digitalWrite
(13
, LOW
); // Met la broche 13 au niveau bas = éteint la LED
delay
(200
); // Pause 200 ms
}
// fin de la fonction loop()