Académique Documents
Professionnel Documents
Culture Documents
lcole
Apprendre aux lves programmer sur Arduino, c'est non seulement leur donner
la cl d'accs aux ordinateurs, mais aussi aux objets qui les entourent
Diduino Arduino
Merci Damien, Lionel, Kristijan et Nikola, lves de loption robotique 2012 des coles
dEcublens, qui ont eu la difficile tche de tester ce cours.
Merci Arnold Pasche de mavoir mis le pied ltrier et pour ses conseils en matire de
soudure et dlectricit.
Et enfin un merci tout particulier au Professeur Jean-Daniel Nicoud pour sa prcieuse aide
et son soutien.
http://www.edurobot.ch - 2012
Diduino Arduino
Prface !
10
Se procurer le matriel!
11
12
12
12
13
13
13
13
Aide!
13
Matriel minimum!
14
Leons 1 8!
14
15
Arduino ou Diduino?!
16
Constitution de la carte!
17
Le microcontrleur!
18
Alimentation!
18
La connectique!
19
Connecteurs Diduino!
21
La platine dexprimentation!
21
Leon 2: la soudure!
http://www.edurobot.ch - 2012
22
3
Diduino Arduino
Leon 3: Les bases de llectronique !
23
Llectricit!
23
Le circuit lectrique!
25
Les diodes!
26
Les rsistances!
27
30
Introduction!
30
Le menu!
31
La LED!
32
Code 1!
32
Introduction au code!
33
Le droulement du programme!
33
Le code minimal!
34
La fonction!
34
Les instructions!
35
35
Les accolades { }!
35
Les commentaires!
36
Les accents!
36
Analyse du code 1!
37
toi de jouer!!
38
39
Code 2!
Variante: faire clignoter deux LEDs!
Exercice 1:!
http://www.edurobot.ch - 2012
40
41
41
Diduino Arduino
Exercice 2:!
41
42
42
42
43
Lincrmentation!
44
45
Code 3!
45
Analyse du code!
46
47
48
Rsumons!!
valuation: K2000!
49
50
Introduction!
50
Les objectifs!
51
tape1: Schmas!
52
tape2: Programme!
53
54
tape1: Schmas!
55
tape2: Programme!
56
Corrig!
57
Variantes!
57
Leon 6: Input!
58
Le bouton poussoir!
Le bouton poussoir normalement ouvert (NO)!
http://www.edurobot.ch - 2012
58
58
5
Diduino Arduino
Le bouton poussoir normalement ferm (NF)!
58
Les interrupteurs!
58
59
60
Protger lArduino!
61
62
62
63
63
64
67
68
69
Les objectifs!
69
71
tape2: Programme!
72
Leon 7: le barregraphe!
73
Introduction!
73
Schmas!
73
http://www.edurobot.ch - 2012
Diduino Arduino
Prface
propos dArduino et rfrences
Arduino est une plateforme open-source d'lectronique programme qui est base sur une
carte microcontrleur et un logiciel.
Arduino peut tre utilis pour dvelopper des objets interactifs, munis d'interrupteurs ou de
capteurs, et peut contrler une grande varit de lumires, moteurs ou toutes autres
sorties matrielles.
Nous pensons quArdiuno a sa place lcole. Ce document est donc principalement
destin aux enseignants et aux lves. Il sagit dune compilation de textes et dexercices,
parfois repris in extenso depuis les sources suivantes:
http://arduino.cc/fr/
http://sciences.siteduzero.com/tutoriel-3-515602-arduino-pour-bien-commencer-enelectronique-et-en-programmation.html
http://mediawiki.e-apprendre.net/index.php/Diduino-Robot
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ARDUINO
http://www.didel.com/diduino/Cours01.pdf
http://www.didel.com/diduino/Cours02.pdf
http://chamayou.franck.free.fr/spip/spip.php?article177
http://www.hexapod-arduino.com
http://www.lagrottedubarbu.com
http://blog.makezine.com/arduino/
http://www.ladyada.net/learn/arduino/
http://www.craslab.org/arduino/livrethtml/LivretArduinoCRAS.html
http://arduino103.blogspot.ch
http://www.semageek.com
http://www.edurobot.ch - 2012
Diduino Arduino
Objectifs du plan dtudes romand
Voici une partie des objectifs du PER abords avec ce cours:
http://www.edurobot.ch - 2012
Diduino Arduino
Objectifs de la discipline AC&M
A 33 AC&M Exercer diverses techniques plastiques et artisanales
-
http://www.edurobot.ch - 2012
Diduino Arduino
propos des schmas lectroniques
Llectronique a ceci dintressant quon passe dun schma lectronique un montage,
ou au contraire, du schma lectronique au montage. Dans les deux cas, cest une activit
qui permet de travailler les objectifs suivants:
Pour raliser les schmas lectroniques, nous utilisons les outils suivants, disponibles
gratuitement sur Mac et PC:
Solve Elec: !
http://www.physicsbox.com/indexsolveelec2fr.html
Fido Cadj:!
http://davbucci.chez-alice.fr/index.php?argument=elettronica/fidocadj/fidocadj.inc
Fritzing:!
http://fritzing.org
http://www.edurobot.ch - 2012
10
Diduino Arduino
Se procurer le matriel
Ce cours est bas sur un module compatible Arduino, appel Diduino.
Nous avons choisi le Diduino, car il possde une platine dexprimentation directement
intgre, et est livr avec de nombreux accessoires, tels que des rsistances, des LEDs,
des capteurs... bref, tout ce quil est ncessaire pour dbuter sur Arduino.
Enfin, le Diduino ncessite que lon soude les connecteurs. Cela ajoute ainsi une
comptence nos lves.
Le matriel ncessaire est donc:
Un Diduino (ou un Arduino)
Du matriel lectronique de base: LEDs, rsistances, fils, boutons poussoirs...
1 fer souder et de ltain
Le Diduino et tout le matriel ncessaire peuvent tre commands cette adresse:
http://www.didel.com
Il est aussi possible de commander du matriel Arduino et lectronique ces adresses:
Suisse:
http://www.play-zone.ch
http://www.conrad.ch
http://mchobby.be
http://www.conrad.fr
http://www.zartronic.fr
http://boutique.semageek.com/fr/
http://www.edurobot.ch - 2012
11
Diduino Arduino
Installer Arduino sur Mac 1: aide-mmoire
!
Pilote
Afin de pouvoir connecter un Diduino sur un Mac, il faut au pralable installer un pilote
srie-USB.
La dernire version du pilote se trouve ici: http://www.ftdichip.com/Drivers/VCP.htm
12
Diduino Arduino
Aide
Erreur programmer is not responding lors de lenvoi
du programme (upload) sur le robot: appuyer sur le
bouton reset du robot avant chaque envoi du
programme. Dbrancher et rebrancher le cble
USB produit le mme effet.
Sources
http://www.didel.com/diduino/Start.pdf
http://arduino.cc/en/Guide/MacOSX
http://fr.flossmanuals.net/_booki/arduino/arduino.pdf
http://myarduino.blogspot.com
http://www.edurobot.ch - 2012
13
Diduino Arduino
Matriel minimum
Voici le matriel ncessaire pour raliser les exercices de ce cours:
Leons 1 8
1 Diduino ou 1 Arduino Uno avec une platine dexprimentation
6 LEDs rouges
2 LEDs jaunes ou oranges
2 LEDs vertes
6 rsistances de 220 ou 470
1 rsistance de 10k
1 condensateur de 10nF (en option)
2 boutons poussoirs
Des cbles lectriques
http://www.edurobot.ch - 2012
14
Diduino Arduino
LEON 1: Dcouverte de la plateforme Arduino
Quest-ce quun ordinateur? La rponse la plus vidente est sans doute de dire quun
ordinateur, cest a:
Source: apple.com
Source: arduino.cc
!.................................................................................................................................
!.................................................................................................................................
!.................................................................................................................................
http://www.edurobot.ch - 2012
15
Diduino Arduino
Arduino ou Diduino?
Arduino est un projet open-source. Cela signifie que tout le monde a accs librement aux
plans, au logiciel (et son code-source), ainsi quau langage de programmation. Tout le
monde peut donc modifier lArduino, crer des accessoires ou mme faire des copies de
lArduino et les vendre.
Les cartes originelles sont vendues par Arduino. Mais de nombreux autres fabricants en
commercialisent, plus ou moins proches des originaux. Cest le cas de lentreprise Didel2 ,
qui commercialise le Diduino.
Nous avons choisi de travailler avec le Diduino pour plusieurs raisons:
Le Diduino possde des connecteurs pour les Kidules3, ce qui permet dajouter de
nombreuses fonctions et de raliser de nombreuses expriences.
Le Diduino doit en partie tre mont et soud. Cest un excellent travail pour les
lves.
Ce cours reste nanmoins parfaitement utilisable avec un Arduino ou un compatible
Arduino
http://www.didel.com
http://www.didel.com/KidulesPub.pdf
http://www.edurobot.ch - 2012
16
Diduino Arduino
Constitution de la carte
http://www.edurobot.ch - 2012
17
Diduino Arduino
Le microcontrleur
Voil le cerveau de notre carte. Cest lui qui va recevoir le programme que nous allons
crer et qui va le stocker dans sa mmoire puis lexcuter. Grce ce programme, il va
savoir faire des choses, qui peuvent tre : faire clignoter une LED, afficher des caractres
sur un cran, envoyer des donnes un ordinateur...
Sur le Diduino, le processeur est cach sous la platine dexprimentation.
Alimentation
Pour fonctionner, une carte Arduino a besoin d'une alimentation. Le microcontrleur
fonctionnant sous 5V, la carte peut tre alimente en 5V par le port USB ou bien par une
alimentation externe qui est comprise entre 7V et 12V. Un rgulateur se charge ensuite de
rduire la tension 5V pour le bon fonctionnement de la carte. Pas de danger de tout
griller donc! Veuillez seulement respecter l'intervalle de 7V 15V (mme si le rgulateur
peut supporter plus, pas la peine de le retrancher dans ses limites).
Attention: ne surtout pas mettre de plus de 6V sur la carte Diduino. Il n'y a pas de
rgulateur et donc pas de connecteur pour une alimentation extrieure. On peut mettre un
bloc de 3 ou 4 accus (ou piles). La tension accepte va de 3 6V.
http://www.edurobot.ch - 2012
18
Diduino Arduino
La connectique
La carte Arduino ne possdant pas de composants
(rsistances, diodes, moteurs...) qui peuvent tre
utiliss pour un programme, il est ncessaire de les
rajouter. Mais pour ce faire, il faut les connecter la
carte. C'est l qu'interviennent les connecteurs de la
carte.
Sur les Arduino et sur beaucoup de cartes
compatibles Arduino, les connecteurs se trouvent au
mme endroit. Cela permet de fixer des cartes
dextension, appele shields.
http://www.edurobot.ch - 2012
19
Diduino Arduino
http://www.edurobot.ch - 2012
20
Diduino Arduino
Connecteurs Diduino
+5V: ! !
Gnd: !!
D0-D13:!
A14-A19:!
Kidules:!
tension +5V
masse (tension 0V)
Connexions aux pattes du micro-contrleur
Entres analogiques pour capteurs
Connecteurs pour Kidules
La platine dexprimentation
La platine dexprimentation est intgre sur le Diduino.
Elle permet de connecter les composants entre eux et de crer des
circuits. Il y a 17 ranges. Dans chaque range, il y a deux groupes
de 5 colonnes, spars par une tranche au milieu.
Tous les connecteurs dans une range de 5 sont connects entre
eux. Donc si on branche deux lments dans un groupe de 5
connecteurs, ils seront relis entre eux.
Sur la plupart des autres cartes Arduino, il ny a pas de breadboard. Il faut donc lacqurir
part. Il en existe de plusieurs types et de plusieurs tailles.
http://www.edurobot.ch - 2012
21
Diduino Arduino
Leon 2: la soudure
Certains modules Arduino, comme le Diduino, ncessitent un petit travail de soudure.
Pour raliser cette tape: nous avons besoin:
Apprendre souder:
http://www.didel.com/Soudure.pdf
http://mightyohm.com/files/soldercomic/translations/Souder%20c'est
%20facile_FR.pdf
Attention!
22
Diduino Arduino
Leon 3: Les bases de llectronique
Llectricit
Llectricit est un dplacement dlectrons dans un milieu conducteur.
Pour que ces lectrons se dplacent tous dans un mme sens, il faut qu'il y ait une
diffrence du nombre d'lectrons entre les deux extrmits du circuit lectrique.
Pour maintenir cette diffrence du nombre d'lectrons, on utilise un gnrateur (pile,
accumulateur, alternateur...)
La diffrence de quantit dlectrons entre deux parties dun circuit sappelle la diffrence
de potentiel et elle se mesure en Volts (V).
23
Diduino Arduino
Pour une dcouverte ludique de llectricit, je vous conseille de regarder le Cest pas
sorcier consacr ce thme:
Partie 1: http://00.lc/cl
Partie 2: http://00.lc/cm
http://www.edurobot.ch - 2012
24
Diduino Arduino
Le circuit lectrique
Ainsi, une pile est constitue dun milieu contenant de nombreux lectrons en trop, et dun
second milieu en manque dlectrons. Quand on relie les deux ples de la pile (le + et le -)
avec un fil lectrique (le conducteur), les lectrons vont alors se dplacer du milieu riche
vers le milieu pauvre. Si on intercale une lampe lectrique, le passage des lectrons va
gnrer de la lumire.
Circuit lectrique
Voici le schma lectrique du circuit ci-dessus:
Pile
+
Lampe
-
Interrupteur
http://www.edurobot.ch - 2012
25
Diduino Arduino
Les diodes
Il est possible de remplacer lampoule par une diode lectroluminescente, aussi appele
LED 5. Elle a la particularit de ne laisser passer le courant lectrique que dans un sens.
Rsine poxy
Fil de liaison
Cavit rflchissante
Puce semi-conductrice
Enclume
Borne
Anode
Grille de connexion
Mplat
Cathode
Le courant lectrique ne peut traverser la diode que dans le sens de lanode vers la
cathode.
On reconnait lanode, car il sagit de la patte la plus longue.
Lorsque les deux pattes sont de mme longueur, on peut
distinguer lanode de la cathode, par un mplat du ct de cette
dernire.
Le symbole de la LED est le suivant:
Attention: le courant produit par lArduino est trop important pour y brancher directement
une LED dessus. Lutilisation dune rsistance est obligatoire, pour ne pas endommager la
LED.
http://fr.wikipedia.org/wiki/Diode_lectroluminescente
http://www.edurobot.ch - 2012
26
Diduino Arduino
Les rsistances
Une rsistance est un composant lectronique ou lectrique dont la
principale caractristique est d'opposer une plus ou moins grande
rsistance (mesure en ohms: ) la circulation du courant lectrique.
On peut alors comparer, le dbit deau au courant lectrique I (qui est
dailleurs le dbit dlectrons), la diffrence de pression la diffrence de
potentiel lectrique (qui est la tension U) et, enfin, le rtrcissement la rsistance R.
Courant de l'eau
Rtrcissement
Rsistance
(milieu peu conducteur)
Courant lectrique
Ainsi, pour une tension fixe, plus la rsistance est faible, plus le courant la traversant est
fort. Cette proportion est vrifie par la loi dOhm:
http://www.edurobot.ch - 2012
27
Diduino Arduino
Outre le tableau ci-dessus, on peut saider du petit mode demploi qui se trouve ici:
http://www.apprendre-en-ligne.net/crypto/passecret/resistances.pdf
La rsistance est schmatise de ces deux manires:
28
Diduino Arduino
Et celle-ci?
http://www.edurobot.ch - 2012
29
Diduino Arduino
Leon 4: faire clignoter la LED
Introduction
Le Diduino possde une LED monte sur le port 13.
Comme premier programme, nous allons la faire clignoter. La programmation se fait dans
le logiciel Arduino.
http://www.edurobot.ch - 2012
30
Diduino Arduino
Le menu
Bouton 1 : !
!
!
Bouton 2 : !
Bouton 3 : !
Bouton 4 : !
Bouton 5 : !
http://www.edurobot.ch - 2012
31
Diduino Arduino
La LED
Code 1
/*
Code 1 - Edurobot.ch, destin au Diduino/Arduino
Objectif: faire clignoter la LED monte sur le port 13
*/
//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est excute en premier et une seule fois, au dmarrage
du programme
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
que
{
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
Tlcharger le code: !
//
//
//
//
http://www.edurobot.ch/code/code1.txt
Une fois le code crit (ou coll) dans la fentre de programmation, il faut lenvoyer sur le
Diduino. Pour cela, il faut cliquer sur le bouton upload (tlverser), naturellement aprs
avoir connect le Diduino lordinateur!
http://www.edurobot.ch - 2012
32
Diduino Arduino
Introduction au code
Le droulement du programme
Le programme se droule de la faon suivante :
1. Prise en compte des instructions de la partie dclarative
2. Excution de la partie configuration ( fonction setup( ) ),
3. Excution de la boucle sans fin ( fonction loop ( ) ): le code compris dans la boucle sans
fin est excut indfiniment.
Droulement du programme
En-tte dclarative
Fichiers d'inclusion
Dclaration des constantes
Dclaration des variables globales
Conguration initiale
Fonction Loop
Boucle sans n
Fonction Setup
Nous verrons petit petit les divers lments prsents dans le schma. Limportant pour le
moment est de savoir quun programme est divis en trois parties: en-tte dclarative,
fonction setup et fonction loop.
La suite va nous permettre dentrer dans le code minimal: les fonctions setup et loop.
http://www.edurobot.ch - 2012
33
Diduino Arduino
Le code minimal6
Avec Arduino, nous devons utiliser un code minimal lorsque l'on cre un programme. Ce
code permet de diviser le programme que nous allons crer en deux grosses parties.
void setup()
{
}
void loop()
{
Nous avons donc devant nous le code minimal qu'il faut insrer dans notre programme.
Mais que peut-il bien signifier pour quelqu'un qui n'a jamais programm ?
La fonction
Dans ce code se trouvent deux fonctions. Les fonctions sont en fait des portions de code.
void setup()
{
Cette fonction setup() est appele 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 excut
quune seule fois. On appelle cette fonction : "fonction d'initialisation". On y retrouvera la
mise en place des diffrentes sorties et quelques autres rglages. C'est un peu le checkup de dmarrage. Imaginons un pilote d'avion dans sa cabine qui fait l'inventaire :
- patte 2 en sortie, tat haut ?
- OK
- timer 3 15 millisecondes ?
- OK
34
Diduino Arduino
Une fois que l'on a initialis le programme, il faut ensuite crer son "cur", autrement dit
le programme en lui mme.
void loop()
{
C'est donc dans cette fonction loop() que lon va crire le contenu du programme. Il faut
savoir que cette fonction est appele en permanence, c'est--dire qu'elle est excute une
fois, puis lorsque son excution est termine, on la rexcute et encore et encore. On
parle de boucle infinie.
Les instructions
Maintenant que nous avons vu la structure des fonctions, regardons ce quelles peuvent
contenir.
Les instructions sont des lignes de code qui disent au programme : "fait ceci, fait cela..."
C'est tout bte, mais trs puissant, car c'est ce qui va orchestrer notre programme.
Les points virgules ;
Les points virgules terminent les instructions. Si par exemple je dis dans mon
programme : "appelle la fonction couperDuSaucisson" je dois mettre un point virgule aprs
l'appel de cette fonction.
Les points virgules ( ; ) sont synonymes d'erreurs, car il arrive trs souvent de les oublier
la fin des instructions. Par consquent le code ne fonctionne pas. Il faut donc tre trs
attentif ne pas oublier de point virgule!
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'intrieur de ces accolades.
Pour ouvrir une accolade sur Mac, taper alt-8 et alt-9 pour la fermer.
http://www.edurobot.ch - 2012
35
Diduino Arduino
Les commentaires
Les commentaires sont des lignes de codes qui seront ignores par le programme. Elles
ne servent en rien lors de l'excution du programme.
Mais alors c'est inutile ?
Non, car cela va nous permettre nous et aux programmeurs qui lirons notre code (s'il y
en a) de savoir ce que signifie la ligne de code que nous avons crite. C'est trs important
de mettre des commentaires et cela permet aussi de reprendre un programme laiss dans
l'oubli plus facilement !
Ligne unique de commentaire :
//cette ligne est un commentaire sur UNE SEULE ligne
Les accents
Il est formellement interdit de mettre des accents en programmation! Sauf dans les
commentaires.
http://www.edurobot.ch - 2012
36
Diduino Arduino
Analyse du code 1 7
Revenons maintenant notre code.
Source: http://00.lc/ce
http://www.edurobot.ch - 2012
37
Diduino Arduino
toi de jouer!
Fais varier les valeurs de linstruction delay. Indique ci-dessous la valeur choisie et le
rsultat obtenu:
Essai 1:
digitalWrite(13, HIGH);
delay(.....);
digitalWrite(13, LOW);
delay(.....);
Rsultat:!_______________________________________________________________
Essai 2:
digitalWrite(13, HIGH);
delay(.....);
digitalWrite(13, LOW);
delay(.....);
Rsultat:!_______________________________________________________________
Essai 3:
digitalWrite(13, HIGH);
delay(.....);
digitalWrite(13, LOW);
delay(.....);
Rsultat:!_______________________________________________________________
http://www.edurobot.ch - 2012
38
Diduino Arduino
Monter une LED
Nous allons maintenant raliser le schma suivant:
Gnd
D10
Fais attention ne pas te tromper de rsistance et bien monter la LED dans le bon sens.
http://www.edurobot.ch - 2012
39
Diduino Arduino
Code 2
Modifie le code ci-dessous, afin de faire clignoter la LED sur la patte 13.
/*
Code 2 - Edurobot.ch, destin au Diduino
Objectif: faire clignoter la LED monte sur la patte 13
*/
void setup() {
// Initialise la patte 13 comme sortie
pinMode(13, OUTPUT);
// Ouvre le port srie 9600 bauds
Serial.begin(9600);
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
//
//
//
//
allume
attend
teint
attend
la LED
500ms
la LED
500ms
http://www.edurobot.ch - 2012
40
Diduino Arduino
Variante: faire clignoter deux LEDs
Ralise le montage suivant:
Exercice 1:
Modifie le code 2 pour faire clignoter les deux LEDs en mme temps.
Corrig: http://www.edurobot.ch/code/code2-1.txt
Exercice 2:
Modifie ton code pour faire clignoter les LEDs en alternance.
Corrig: http://www.edurobot.ch/code/code2-2.txt
http://www.edurobot.ch - 2012
41
Diduino Arduino
Leon 5: les variables
Nous l'avons vu, dans un microcontrleur, il y a plusieurs types de mmoire. Nous nous
occuperons seulement de la mmoire "vive" (RAM) et de la mmoire "morte" (EEPROM).
Je vais vous poser un problme. Imaginons que vous avez connect un bouton poussoir
sur votre carte Arduino. Comment allez-vous stocker l'tat du bouton (appuy ou pas) ?
42
Diduino Arduino
Dfinir une variable
Si on donne un nombre notre programme, il ne sait pas si c'est une variable ou pas. Il
faut le lui indiquer. Pour cela, on donne un type aux variables. Oui, car il existe plusieurs
types de variables ! Par exemple la variable "x" vaut 4 :
x = 4;
Et bien ce code ne fonctionnerait pas car il ne suffit pas ! En effet, il existe une multitude
de nombres : les nombres entiers, les nombres dcimaux, ... C'est pour cela qu'il faut
assigner une variable un type.
Voil les types de variables les plus rpandus
Par exemple, si notre variable "x" ne prend que des valeurs dcimales, on utilisera les
types int, long, ou char. Si maintenant la variable "x" ne dpasse pas la valeur 64 ou 87,
alors on utilisera le type char.
char x = 0;
Si en revanche x = 260, alors on utilisera le type suprieur (qui accepte une plus grande
quantit de nombre) char, autrement dit int ou long.
Mais t'es pas malin, pour viter les dpassements de valeur ont met tout dans des double
ou long !
Oui, mais NON. Un microcontrleur, ce n'est pas un ordinateur 2GHz multicore, 4Go de
RAM ! Ici on parle d'un systme qui fonctionne avec un CPU 16MHz (soit 0,016 GHz) et
2 Ko de SRAM pour la mmoire vive. Donc deux raisons font qu'il faut choisir ses
variables de manire judicieuse :
- La RAM n'est pas extensible, quand il y en a plus, y en a plus !
http://www.edurobot.ch - 2012
43
Diduino Arduino
Le processeur est de type 8 bits (sur Arduino UNO), donc il est optimis pour faire des
traitements sur des variables de taille 8 bits, un traitement sur une variable 32 bits prendra
donc (beaucoup) plus de temps !
Si prsent notre variable "x" ne prend jamais une valeur ngative (-20, -78, ...), alors on
utilisera un type non-sign. C'est dire, dans notre cas, un char dont la valeur n'est plus
de -128 +127, mais de 0 255.
Voici le tableau des types non signs, on repre ces types par le mot unsigned (de
l'anglais : non-sign) qui les prcde :
Une des particularits du langage Arduino est qu'il accepte un nombre plus important de
types de variables, listes dans ce tableau:
Lincrmentation
Il est possible dappliquer des variables diverses oprations mathmatiques.
Commenons tout de suite par un petit exemple: lincrmentation. Il sagit simplement
dadditionner 1 la variable. A chaque fois quon rpte le code, on ajoute 1 la variable.
Cela se fait grce ce code (var tant une variable choix):
var++;
var++; revient crire : "var = var + 1;"
http://www.edurobot.ch - 2012
44
Diduino Arduino
Serial.begin(9600);
//
//
//
//
//
}
}
void loop() {
}
45
Diduino Arduino
Analyse du code 8
La ligne byte compteur; permet de crer une variable compteur. Byte indique le type de la
variable, c'est--dire le type de donnes que l'on pourra stocker dans cette variable.
Comme nous lavons dj vu, le type byte permet de stocker des valeurs comprises entre
0 et 255.
La ligne for(compteur=0; compteur<10; compteur++) { instructions } sert faire varier la
variable compteur de 0 9 (en l'augmentant chaque fois de 1: c'est ce que fait
l'instruction compteur++) et chaque fois excute toutes les instructions jusqu'
l'accolade }. Cela va donc avoir l'effet de rpter le code suivant 10 fois:
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(500);
//
//
//
//
allume
attend
teint
attend
la LED
500ms
la LED
500ms
Source: http://mediawiki.e-apprendre.net/index.php/Dcouverte_des_microcontrleurs_avec_le_Diduino
http://www.edurobot.ch - 2012
46
Diduino Arduino
Faire clignoter deux LED 20 fois
Ralise le montage suivant:
Modifie ton code pour que les deux LED clignotent en mme temps vingt fois.
Tu trouveras le corrig ici: http://edurobot.ch/code/code4-1.txt
Modifie maintenant le programme pour que les LED clignotent en alternance vingt fois.
Tu trouveras le corrig ici: http://edurobot.ch/code/code4-2.txt
http://www.edurobot.ch - 2012
47
Diduino Arduino
Dfinir les pattes du microcontrleur
Jusqu maintenant, nous avons identifi les pattes du microcontrleur laide de leurs
numros, comme dans lexemple suivant: pinMode(10, OUTPUT);.
Il est aussi possible de crer une variable dfinissant la broche utilise, ensuite, dfinir si
la patte utilise doit tre une entre du microcontrleur ou une sortie.
Premirement, donc, dfinissons la patte utilise du microcontrleur :
const int led_rouge = 2;
variable
Le terme const signifie que l'on dfinit la variable comme tant constante. Par consquent,
on change la nature de la variable qui devient alors constante.
Le terme int correspond un type de variable. En dfinissant une variable de ce type, elle
peut stocker un nombre allant de -2147483648 +2147483647 ! Cela nous suffit
amplement ! Ainsi, la patte 2 devient led_rouge.
Nous sommes donc en prsence d'une variable, nomme led_rouge, qui est en fait une
constante, qui peut prendre une valeur allant de -2147483648 +2147483647. Dans notre
cas, cette constante est assigne 2. Le chiffre 2.
Lorsque le code sera compil, le microcontrleur saura ainsi que sur sa broche numro 2,
il y a un lment connect.
Profitons maintenant pour voir ce que signifie le terme Output utilis jusqu prsent.
Il sagit de prciser si cette patte est une entre ou une sortie. Oui, car le microcontrleur a
la capacit d'utiliser certaines de ses pattes en entre ou en sortie. C'est fabuleux ! En
effet, il suffit simplement dinterchanger UNE ligne de code pour dire qu'il faut utiliser une
patte en entre (rcupration de donne) ou en sortie (envoi de donne).
Cette ligne de code justement, parlons-en ! Elle doit se trouver dans la fonction setup().
La fonction se trouve tre pinMode(). Pour utiliser cette fonction, il faut lui envoyer deux
paramtres :
Le nom de la variable que l'on a dfini la broche
Le type de broche que cela va tre (entre ou sortie)
void setup()
{
pinMode(led_rouge, OUTPUT); //initialisation de la patte 2 comme tant une
sortie
}
48
Diduino Arduino
Rsumons!
Concrtement, quest-ce que cela signifie?
Et bien, dans notre code 1, nous avions dfini la patte du microcontrleur de cette faon:
void setup() {
// Initialise la patte 13 comme sortie
pinMode(13, OUTPUT);
// Ouvre le port srie 9600 bauds
Serial.begin(9600);
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
//
//
//
//
allume
attend
teint
attend
la LED
500ms
la LED
500ms
void setup() {
// Initialise led_rouge comme patte de sortie
pinMode(led_rouge, OUTPUT);
// Ouvre le port srie 9600 bauds
Serial.begin(9600);
}
void loop() {
digitalWrite(led_rouge, HIGH);
//
delay(500);
// attend
digitalWrite(led_rouge, LOW);
//
delay(500);
// attend
}
allume la LED
500ms
teint la LED
500ms
quoi est-ce que cela sert? Quand nous aurons de nombreuses pattes en fonction, cela
nous permettra de les identifier plus facilement. Ainsi, si nous avons plusieurs LED, nous
pouvons les appeler L1, L2, L3,... et si nous utilisons des LED de plusieurs couleurs, nous
pourrons les appeler rouge, vert, bleu,...
Enfin, si on veut changer la patte utilise, il suffit de corriger la variable, sans devoir
corriger tout le code.
http://www.edurobot.ch - 2012
49
Diduino Arduino
valuation: K2000
Introduction
Les exploits dun chevalier solitaire, dans un monde dangereux; le chevalier et sa
monture...
Il y longtemps de cela, du temps de ma jeunesse (soit peu de temps aprs la disparition
du dernier mammouth), un hros hantait la petite lucarne: Michael Knight et sa voiture
parlante, Kitt.
Je tinvite revoir le gnrique de cette srie danthologies (en terme de mauvais got
capillaire) ici: http://www.youtube.com/watch?v=PI_1sNt1cl8 9
Comme tu peux le voir, la voiture possde sur son capot des LED qui simulent un
mouvement de droite gauche et de gauche droite (avec un magnifique son du style
fschouiiii-fschouiiiii).
Ta mission, si tu lacceptes (mais tu as intrt... cest quand mme une valuation!), est de
reproduire cet accessoire indispensable toute automobile qui se respecte: le bandeau de
LED... mais sans le son (le mauvais got des limites).
Pour cela, tu auras besoin de 6 LED rouges ( priori... mais tout est possible) et de 6
rsistances (des 220 470 feront parfaitement laffaire).
Pour taider, nhsite pas regarder cette petite vido dexemple: http://00.lc/k2000
Corrig 10: http://www.edurobot.ch/code/k2000.pdf
9
10
Fichier protg par un mot de passe. Pour lobtenir: info [at] edurobot.ch
http://www.edurobot.ch - 2012
50
Diduino Arduino
Les objectifs
Si applicable:
Objectifs de la discipline MEP
MEP 34 Dvelopper des sujets, des projets favorisant
une ouverture sur les sciences du pass, actuelles et du futur...
Familiarisation avec des faons de faire et de raisonner propres la logique robotique, notamment
en:
-
identifiant les objectifs dune activit ainsi que les notions thoriques et pratiques qui en rsultent
planifiant, construisant et programmant le robot en fonction des observations et des mesures
effectues
testant le robot afin didentifier dventuelles erreurs de conception et en mettant en place des
stratgies de remdiation
Initiation l'utilisation d'outils et de procds simples afin de faire fonctionner un robot de
manire autonome
http://www.edurobot.ch - 2012
51
Diduino Arduino
tape1: Schmas
Ralise le plan du montage que tu vas utiliser:
D0
+5V
Gnd
A19
D1
A18
D2
A17
D3
A16
D4
A15
D5
A14
D6
D7
+5V
D8
+5V
Gnd
Gnd
D9
Gnd
D10
+5V
D11
Gnd
D12
reset
D13
Gnd
+5V
D....
D....
D....
D....
D....
D....
http://www.edurobot.ch - 2012
52
Diduino Arduino
tape2: Programme
Rdige ton programme ici:
http://www.edurobot.ch - 2012
53
Diduino Arduino
Les feux de circulation
Lobjectif est de crer deux feux de circulation et de les faire fonctionner de manire
synchrone.
Voici les phases de deux feux de circulation que tu dois recrer:
Feu 1
phases
1 2 3 4
Feu 2
60 sec
5 sec
60 sec
5 sec
tablis la liste des composants que tu auras besoin pour raliser le projet:
http://www.edurobot.ch - 2012
54
Diduino Arduino
tape1: Schmas
Ralise le plan du montage que tu vas utiliser:
D0
+5V
Gnd
A19
D1
A18
D2
A17
D3
A16
D4
A15
D5
A14
D6
D7
+5V
D8
+5V
Gnd
Gnd
D9
Gnd
D10
+5V
D11
Gnd
D12
reset
D13
Gnd
+5V
D....
D....
D....
D....
D....
D....
http://www.edurobot.ch - 2012
55
Diduino Arduino
tape2: Programme
Rdige ton programme ici:
http://www.edurobot.ch - 2012
56
Diduino Arduino
Corrig
Tu trouveras le corrig ladresse suivante: http://edurobot.ch/code/code5.txt
Variantes
Variante 1
Il y a souvent un dcalage entre le passage dun feu au rouge et le passage au vert de
lautre feu. Cest en particulier le cas pour les feux de chantier. Cela permet aux voitures
encore engages dans la zone de chantier de la quitter, avant de laisser la place aux
voitures venant en face.
Dcrire les phases des feux et les programmer pour tenir compte du dlai.
Variante 2
Intgrer un troisime feu, qui passe du rouge au vert en alternance avec les deux autres
feux.
Raliser le schma lectronique et programmer les feux.
Variante 3
Raliser les feux pour un carrefour:
Source: http://minne.romain.free.fr/MPI/tp10_carrefour/Gestion_d_un_carrefour.html
http://www.edurobot.ch - 2012
57
Diduino Arduino
Leon 6: Input
Le bouton poussoir
Le bouton poussoir normalement ouvert (NO)
Cest le bouton le plus frquemment rencontr:
- Relch : le courant ne passe pas, le circuit est
dconnect ; on dit que le circuit est ouvert.
- Appuy : le courant passe, on dit que le circuit est ferm.
Habituellement le bouton poussoir a deux broches, mais
en gnral ils en ont 4 relies deux deux.
Le bouton poussoir normalement ferm (NF)
Ce type de bouton est l'oppos du type prcdent, c'est--dire que lorsque le bouton est
relch, il laisse passer le courant. Et inversement :
- Relch : le courant passe, le circuit est connect ; on dit que le circuit est ferm.
- Appuy : le courant ne passe pas, on dit que le circuit est ouvert.
Les interrupteurs
la diffrence d'un bouton poussoir, l'interrupteur agit
comme une bascule. Un appui ferme le circuit et il faut un
second appui pour l'ouvrir de nouveau. Il possde donc des
tats stables (ouvert ou ferm). Nous en rencontrons tous les
jours lorsque nous allumons la lumire.
Bouton poussoir NO
http://www.edurobot.ch - 2012
Bouton poussoir NF
Interrupteur
58
Diduino Arduino
Exercice 1: allumons cette LED
Ralise le circuit suivant:
Gnd
+5V
Lorsquon appuie sur le bouton poussoir, on ferme le circuit. Le courant passe alors et la
LED sallume.
http://www.edurobot.ch - 2012
59
Diduino Arduino
Exercice 2: mais par o passe le courant?
Ralise le circuit suivant:
Gnd
+5V
Il y a plus de rsistance au passage du courant lorsquil traverse une LED quun bouton
poussoir. Or, le courant passera l o il rencontrera le moins de rsistance.
Cest pourquoi, quand le bouton poussoir est relch, le courant passe par la LED. Mais
lorsque tu appuies sur le bouton, la LED steint. En effet, le courant prfre passer au
travers du bouton poussoir.
http://www.edurobot.ch - 2012
60
Diduino Arduino
Protger lArduino
Jusqu maintenant, nous nous sommes toujours contents de faire circuler du courant du
microcontrleur la masse.
Au lieu dutiliser les pattes du microcontrleur seulement sous forme de sortie (OUTPUT),
nous allons aussi les utiliser sous forme dentre (INPUT); cest--dire quau lieu dtre
raccorde la masse, la patte sera raccorde au +5V. Tout se passera bien, si au niveau
du programme, la patte est configure comme input. Mais si elle devait tre configure en
output par erreur, il est presque certain que le microcontrleur finira immdiatement au
paradis des puces lectroniques grilles.
Ainsi, pour viter de condamner notre microcontrleur la chaise lectrique, nous allons
devoir le protger. Cela peut se faire en connectant sur la patte du microcontrleur utilis
comme input une rsistance dune centaine dOhms. Comme le Diduino est fourni avec
des rsistances de 220 , cest celle que nous utiliserons.
ATTENTION!
Lorsque vous branchez le Diduino lordinateur, le dernier programme reu est excut.
Avant de commencer un nouveau montage, il est plus que conseill denvoyer un
programme dinitialisation, du modle de celui-ci:
//Programme vide dinitialisation
void setup() {
}
void loop() {
}
Maintenant que ce point est rgl, voyons comment utiliser le bouton poussoir avec le
microcontrleur.
http://www.edurobot.ch - 2012
61
Diduino Arduino
Rsistance Pull-Down / Pull-Up
Circuit avec une une rsistance pull-down
Observons ce schma:
Lorsque lon presse le bouton poussoir, on envoie +5 Volts sur D4, qui sera interprt
comme un 1.
Lorsquon relche le bouton, il ny a plus de courant qui arrive sur D4, ce qui sera
interprt comme un 0. On a donc un signal binaire: allum/teint (on/off).
Ce montage contient une rsistance de 10 k (soit 10000 ), quon appelle pull-down
(littralement tirer-en-bas). Cette rsistance permet de tirer le potentiel vers le bas (pulldown). En franais, on appelle aussi ceci un rappel au moins.
En effet, contrairement au cas thorique, fermer ou ouvrir un circuit (via un interrupteur ou
un bouton poussoir) ne gnre pas forcment un signal clair:
Le circuit non connect la source peut agir comme une antenne dans un
environnement pollu d'ondes lectromagntiques (proches des moteurs par exemple).
Cela va gnrer dans le circuit un courant qui peut tre interprt comme un signal.
Il peut rester dans un circuit rcemment ouvert un niveau d'nergie. Cela provoque des
cas d'indtermination. Le signal qui a t coup peut tre considr comme encore actif
par un microcontrleur.
Le but d'une rsistance de pull-down est donc dvacuer les courants vagabonds et
de donner un signal clair.
Si on presse le bouton, 5 Volts sont alors appliqus sur l'entre. Le courant va prendre le
chemin le plus simple, soit par la rsistance de 220 et finit par arriver sur D4. Si on
relche le bouton, la rsistance pull-down ramne l'entre la masse (puisquelle est
connecte la masse).
http://www.edurobot.ch - 2012
62
Diduino Arduino
Circuit avec une rsistance pull-up
Observons maintenant ce schma:
Si on le compare au schma dun circuit avec une rsistance pull-down, on constate une
inversion entre la terre et le +5V.
En effet, lorsque le circuit est ouvert, une tension de +5V est applique lentre D4.
Lorsquon appuie sur le bouton poussoir, le courant lectrique va passer par le chemin
offrant le moins de rsistance, soit directement par la masse (Gnd), sans passer par
lentre D4.
Le fonctionnement est donc invers par rapport la rsistance pull-down.
Rsistance pull-down ou pull-up?
A notre niveau, la seule chose qui va changer entre une rsistance pull-down et une
rsistance pull-up est la lecture de linformation:
Avec une rsistance pull-down, par dfaut, lentre sur la patte est gale 0.
Avec une rsistance pull-up, par dfaut, lentre sur la patte est gale 1.
Dans le code if (digitalRead(bouton) == 1 ) , sera respectivement la valeur dentre
lorsque le circuit est ferm (pull-down) ou ouvert (pull-up).
http://www.edurobot.ch - 2012
63
Diduino Arduino
Exercice 3: montage avec rsistance pull-down (rappel au moins)11
Ralisons maintenant le circuit suivant:
Gnd
+5V
D4
D12
11
http://www.edurobot.ch - 2012
64
Diduino Arduino
Observons maintenant le code:
/*
Code 7 - Edurobot.ch, destin au Diduino
Allume LED en fonction de l'tat du bouton poussoir
*/
void setup()
{
pinMode(bouton, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop()
{
// Si boutton poussoir appuy
if (digitalRead(bouton) == 1 )
{
digitalWrite(led, HIGH);
}
// Sinon
else
{
digitalWrite(led, LOW);
}
// allume la LED
http://www.edurobot.ch - 2012
65
Diduino Arduino
Analysons le code:
const int bouton = 4;
const int led = 12;
Voil, maintenant notre microcontrleur sait qu'il y a quelque chose de connect sur sa
patte 4 et quelle est configure en entre (input). De mme, la patte 12 est configure en
sortie (output).
Maintenant que le bouton est paramtr, nous allons chercher savoir quel est son tat
(appuy ou relch).
Si le microcontrleur dtecte une diffrence de potientiel de +5V sa patte 4, alors il
stockera une valeur de 1.
Dans le cas contraire (diffrence de potientiel de 0V), il stockera une valeur de 0.
Pour lire ltat de la patte 4, nous allons utiliser lexpression digitalRead. Ainsi:
if (digitalRead(bouton) == 1 )
digitalWrite(led, HIGH);
// allume la LED
et les lignes:
else {
digitalWrite(led, LOW);
// teint la LED
66
Diduino Arduino
Une petite variation de code
Le code prcdent est simple, mais manque un peu de finesse; un peu comme un barbare
avec une hache deux mains dans une rception de Monsieur lAmbassadeur. Voici donc
une autre solution:
/*
Code 8 - Edurobot.ch, destin au Diduino
Allume LED en fonction de l'tat du bouton poussoir
*/
const int bouton = 4;
const int led = 12;
int etatbouton;
void setup()
{
pinMode(bouton, INPUT);
pinMode(led, OUTPUT);
etatbouton = LOW;
Serial.begin(9600);
}
void loop()
{
etatbouton = digitalRead(bouton); //On mmorise ltat du bouton
if(etatbouton == LOW) //teste si le bouton a un niveau logique BAS
{
digitalWrite(led,LOW); //la LED reste teinte
}
else //teste si le bouton a un niveau logique diffrent de BAS (donc HAUT)
{
digitalWrite(led,HIGH); //le bouton est appuy, la LED est allume
}
}
Pour commencer, nous allons crer une variable que nous choisirons dappeler
etatbouton. Elle servira stocker ltat du bouton (logique, non?):
int etatbouton;
On inscrit ltat du bouton dans la variable de cette manire, avec la fonction digitalRead:
etatbouton = digitalRead(bouton);
http://www.edurobot.ch - 2012
67
Diduino Arduino
Il ne nous reste plus qu appeler ltat du bouton, stock dans la variable etatbouton, et
lui faire passer un petit test avec if... else (si... sinon):
Si (if) ltat du bouton est LOW (cest--dire = 0), alors la LED est LOW (teinte). Sinon
(else), la LED est HIGH (en effet, si ltat du bouton nest pas LOW, il ne peut tre que
HIGH, soit allume...)
Et cela donne donc ceci:
if(etatbouton == LOW) //teste si le bouton a un niveau logique BAS
{
digitalWrite(led,LOW); //la LED reste teinte
}
else //teste si le bouton a un niveau logique diffrent de BAS (donc HAUT)
{
digitalWrite(led,HIGH); //le bouton est appuy, la LED est allume
}
http://www.edurobot.ch - 2012
68
Diduino Arduino
Evaluation: vers linfini et au-del!
Bienvenue bord, Astronaute! Lheure est grave! La galaxie est menace par les infmes
VoRteX. Pour la sauver, tu dois concevoir un pistolet protoplasmique dodcaneutrino.
Voici le montage que tu devras raliser (tu peux carter LEDs pour avoir plus de place):
Gnd
+5V
D4
D8 D10 D12
Les objectifs
http://www.edurobot.ch - 2012
69
Diduino Arduino
Objectifs de la discipline MSN
MSN 35 Modliser des phnomnes naturels, techniques, sociaux ou des
situations mathmatiques
-
Si applicable:
Objectifs de la discipline MEP
MEP 34 Dvelopper des sujets, des projets favorisant
une ouverture sur les sciences du pass, actuelles et du futur...
Familiarisation avec des faons de faire et de raisonner propres la logique robotique, notamment
en:
-
identifiant les objectifs dune activit ainsi que les notions thoriques et pratiques qui en rsultent
planifiant, construisant et programmant le robot en fonction des observations et des mesures
effectues
testant le robot afin didentifier dventuelles erreurs de conception et en mettant en place des
stratgies de remdiation
Initiation l'utilisation d'outils et de procds simples afin de faire fonctionner un robot de
manire autonome
http://www.edurobot.ch - 2012
70
Diduino Arduino
Etape 1: les schmas
Commence par raliser le schma lectronique:
3V3 5V
Vin
Power
D13
RST
D12
AREF
D11
PWM
D10
PWM
D9
PWM
IO REF
Arduino
N/C
Digital Input/Output
D8
A0
A1
A3
A4
D6
PWM
D5
PWM
D4
D3
Analog Input
A2
D7
PWM
D2
D1
D0
TX
RX
SCL
A5
GND
SDA
http://www.edurobot.ch - 2012
OUTPUT
71
Diduino Arduino
tape2: Programme
Rdige ton programme ici:
72
Diduino Arduino
Leon 7: le barregraphe
Introduction
Un barregraphe est un afficheur qui indique une quantit, provenant d'une information
quelconque (niveau d'eau, puissance sonore, etc.), sous une forme lumineuse. Le plus
souvent, on utilise des LEDs alignes en guise d'affichage.
Lobjectif de cet exercice est de raliser un barregraphe de 4 LEDs, avec deux boutons
poussoirs. Lun deux servira incrmenter la valeur sur le barregraphe ( savoir
augmenter le nombre de LEDs allumes), alors que lautre servira le dcrmenter.
Schmas
Voici le schma du circuit construire:
5V
Arduino1
3V3 5V
Vin
Power
4 LEDs choix
RST
D13
AREF
D12
A0
A4
Analog Input
A3
PWM
D10
PWM
D9
PWM
D8
D7
D6
PWM
D5
PWM
D3
Rsistances
de protection
R7
100
D4
A1
A2
D11
5V
Digital Input/Output
Arduino
R1
220
R2
220
R3
220
R4
220
PWM
D2
D1
D0
A5
GND
http://www.edurobot.ch - 2012
TX
RX
R8
100
R5
10k
R6
10k
Rsistances pull-down
73
Diduino Arduino
+5V
Gnd
D8
D9
D10
D11
D0
D1
D2
D3
D4
D5
D6
D7
+5V
http://www.edurobot.ch - 2012
74
Diduino Arduino
Analysons le code, maintenant:
En se rfrant au schma de montage, on dclare les constantes pour chaque patte: les
boutons poussoirs sont connects sur les pattes 2 et 3, alors que les LEDs sont
connectes aux pattes 8 11.
/*
Dclaration des constantes pour les noms des pattes
*/
const int
allums
const int
allums
const int
const int
const int
const int
btn_minus = 2;
btn_plus = 3;
led_0
led_1
led_2
led_3
=
=
=
=
8;
9;
10;
11;
//Led
//Led
//Led
//Led
0
1
2
3
On initilaise ensuite les pattes, selon quil sagit des entres (les boutons) ou des sorties
(les LEDs).
/*
Initilisation des pattes en entre/sortie: entres pour les boutons, sorties
pour les LEDs
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
pinMode(led_0, OUTPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
}
http://www.edurobot.ch - 2012
75
Diduino Arduino
Traduisons cela en franais: si ltat du bouton 2 est diffrent de celui enregistr, et que
quelquun appuye sur le bouton, alors...
Le != signifie est diffrent de (teste la diffrence entre deux variables) et loprateur
logique && signifie ET ( Pour tre prcis, nous avons: si ... et... avec le if ... &&... Exemple:
si il fait beau et chaud, alors on va la plage).
Rappelons-nous maintenant de lopration ++, qui incrmente une variable (variable =
variable + 1, cest--dire; on ajoute chaque fois 1 la variable). Dans notre cas, il sagit
de la valeur de la variable nombre_led quon incrmente.
{
nombre_led++; //on incrmente la variable qui indique combien de LEDs
devrons s'allumer
}
76
Diduino Arduino
if((etat_bouton != memoire_minus) && (etat_bouton == LOW))
{
nombre_led--; //on dcrmente la valeur de nombre_led
}
memoire_minus = etat_bouton; //on enregistre l'tat du bouton pour le tour
suivant
Nous allons maintenant limiter le nombre de LEDs connecter. En effet, dans notre cas,
nous avons 4 LEDs. Alors si on appuie 10 fois sur le bouton 2, cela nallumera que les 4
LEDs.
//on applique des limites au nombre pour ne pas dpasser 4 ou 0 (puisqu'on a
4 LEDs)
if(nombre_led > 4)
{
nombre_led = 4;
}
Maintenant, nous devons grer lallumage des LEDs. Pour cela, on va crer une fonction
daffichage appelle affiche, avec une variable int valeur_recue.
//On cr une fonction affiche() pour l'affichage du rsultat
//on lui envoie alors en paramtre la valeur du nombre de LED clairer
affiche(nombre_led);
}
void affiche(int valeur_recue)
http://www.edurobot.ch - 2012
77
Diduino Arduino
Si la fonction reoit le nombre 1, on allume la LED 1. Si elle reoit le nombre 2, elle allume
la LED 1 et 2. Si elle reoit 3, elle allume la LED 1, 2 et 3. Enfin, si elle reoit 4, alors elle
allume toutes les LEDs:
//Puis on les allume une une
if(valeur_recue >= 1)
// "si la valeur reue est plus grande ou
gale 1..."
{
digitalWrite(led_0, LOW);
// "on allume la LED 0
}
if(valeur_recue >= 2)
// "si la valeur reue est plus grande ou
gale 2..."
{
digitalWrite(led_1, LOW);
// "on allume la LED 1 (sous-entendu que
la LED 0 est allume, puisque la valeur est plus grande que 1)
}
if(valeur_recue >= 3)
// "si la valeur reue est plus grande ou
gale 3..."
{
digitalWrite(led_2, LOW);
// "on allume la LED 2
}
if(valeur_recue >= 4)
// "si la valeur reue est plus grande ou
gale 4..."
{
digitalWrite(led_3, LOW);
// "on allume la LED 3
}
}
!
Le symbole >= signife: ...est suprieur ou gal .... Il sagit de tester la supriorit ou
l'galit d'une variable par rapport une valeur. Ainsi, dans:
if(valeur_recue >= 4)
{
digitalWrite(led_3, LOW);
}
Il faut lire: si la variable valeur_recue est suprieure ou gale 4, alors on allume la LED
3.
http://www.edurobot.ch - 2012
78