24 mars 2012
Arduino leçon 1 : Entrées-sorties numériques
Nous verrons les entrées numériques, les sorties numériques, et aussi la structure SI ... ALORS ... SINON ...

Définition
On appelle numériques des bornes de la plaquette qui fonctionnent en "tout ou rien", c'est à dire 0 ou 5 volts.
on les appelle aussi digitales ou logiques .
en entrée : il faut leur fournir
- soit une tension comprise entre 2,5 et 5 volts et elle est alors reconnue comme niveau 1
- soit moins de 0,8 volt et elle est alors reconnu comme niveau 0
sinon le résultat est incertain
en sortie : pas de problème, Arduino fournit 0 ou 5 volts.
attention : une borne en entrée non reliée à 0 volt ou 5 volts est lue de façon hasardeuse, donc à éviter.
Application : faire un montage en 2 étapes
- d'abord une Led qui clignote
- ensuite on ajoutera une autre qui s'allume quand on appuie sur un bouton.
repérages d'une led
La cathode (borne moins) d'une diode est la plus courte.
On la reconnaît aussi par un méplat sur le boîtier.Branchements

Arduino est sécurisé : chaque sortie est limitée à 20 mA. Ce n'est pas une raison pour faire n'importe quoi. Nous ne brancherons pas les leds directement sur les broches mais par l'intermédiaire d'une résistance.
1er montage : utilisation d'une sortie digitale
Nous mettons l'anode d'une led sur la borne digitale 2.
la cathode est reliée à la masse par une résistance.

le programme
Son rôle sera de
- allumer la led
- attendre 1 seconde
- éteindre la led
- attendre 1 seconde
- recommencer
Il faudra d'abord informer Arduino que la broche 13 servira de sortie.
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH); // éclaire la LED
delay(1000); // attend 1 seconde
digitalWrite(13, LOW); // éteint la LED
delay(1000); // attend 1 seconde
}
Rappel de quelques notions de programmation
commentairesPour comprendre le rôle des différentes parties d'un programme, on insère des commentaires.Les commentaires ne sont pas interprétés par le programme. Ils sont juste destinés à expliquer le programme. Un commentaire est compris entre "//" et la fin de la ligne ou entre "/*" et "*/". variablesC'est un moyen pratique d'utiliser une valeur.On la définit par son type (exemple "int" qui signifie "nombre entier") et son nom ("led" dans notre exemple). On peut lui donner une valeur (13 dans notre exemple) mais ce n'est pas obligatoire au moment où on la définit. Dans notre programme, on ne change jamais cette valeur mais ça peut arriver. Ça arrive même souvent. Quand elle ne change jamais, comme ici, on parle plutôt de constante que de variable. instructionUne ligne de commande s'appelle une instruction.Elle se termine par un point-virgule. fonctionsUne fonction est un groupe d'instructions utilisées ensemble et encadrées par des { } .On la définit par sa valeur de retour (notion qu'on étudiera plus tard). Dans le cas actuel cette valeur est absente et on le précise par le mot "void". On lui donne un nom. Ce nom est fixé pour les fonctions setup() et loop(). Il est libre pour les fonctions que nous créons. On fait suivre son nom d'une paire de parenthèses et on groupe les instructions qu'elle contient entre de accolades {}. int toto; // définit une variable int jojo() // annonce une fonction |
2ème montage : utilisation d'une entrée digitale
Sur le même montage, on ajoute :
- une led sur la borne 3, branchée comme la première
- un bouton-poussoir entre la borne 4 et le 5Volts.
- une résistance entre la borne 4 et la masse
Cette seconde led s'éclairera quand on appuyera sur le bouton.
Il suffit d'ajouter dans la loop
- la lecture de l'état du bouton
- l'éclairage ou non de la LED

La condition IF...THEN...ELSE
SI ... ALORS ... SINON ...
IF (la condition est vraie)
{ les accolades contiennent les instructions à exécuter }
ELSE
{ la 2ème paire d'accolades contient les instructions à exécuter dans le cas contraire }
exemple 1
IF (il fait froid)
{ on s'habille chaudement; }
ELSE
{ on peut aller se baigner; }
exemple 2
IF (il y a des octets à recevoir) {
on en lit un;
on le stocke;
}
et comme dans le cas contraire on ne fait rien, le ELSE est inutile.
Le programme
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH); // éclaire la LED
delay(1000); // attend 1 seconde
digitalWrite(13, LOW); // éteint la LED
delay(1000); // attend 1 seconde
// 2ème partie du programme (led 3 et bouton)
etatBouton = digitalRead(4);
// Serial.print(etatBouton); // pendant les essais
digitalWrite(3, etatBouton);
}
Lancez la compilation. On vous indique une erreur. Corrigez la.

défaut de ce programme
Ce programme passe son temps à attendre. Arduino ne peut pas effectuer d'autre tâche.
Pour bien comprendre ce problème, nous allons remplacer la seconde d'attente par 5 secondes : delay(5000);
Regardez ce qui se passe quand vous appuyez sur le bouton ou quand vous le relâchez.
solution
supprimer les appels à la fonction delay().
Nous verrons bientôt une fonction qui permet de le faire.
complément d'information
Les résistances que j'ai utilisées en série avec les leds avait une valeur de 270 ohms.
Celle en série avec le bouton-poussoir avait une valeur de 68 Kilohms donc environ 300 fois plus.
On n'est pas obligés d'avoir exactement ces valeurs. Pour éclairer une led sous 5 volts, on met entre 200 et 500 ohms.
Pour amener un niveau sur une entrée, on met une très forte valeur (10 à 100 Kilohms) car quand on appuye sur le poussoir elle est
directement entre le +5 et la masse.
La plaque à trous s'appelle une breadbord (planche à pain). La petite qui est sur votre plaquette a 2 zones de 17 lignes de 5 trous.
Elle comporte aussi maintenant (ce n'était pas le cas sur l'ancien modèle) 2 lignes noires de 5 trous.
L'une est reliée à la masse, l'autre au +5.

Les breadbords courantes ont des lignes de 5 trous mais aussi 2 lignes longitudinales qu'on utilise
généralement pour la masse et le + .
Voici le recto d'une breadboard et le verso d'une autre dont le dos soulevé laisse voir les contacts.


haut de la page

