td1 Arduino Ing2
td1 Arduino Ing2
td1 Arduino Ing2
Consignes
Ce premier TD machine a les objectifs suivants :
— développer un premier programme en Langage C++ sur la carte Arduino Uno,
— découvrir la boucle infinie propre aux microcontrôleurs,
— utiliser les ports d’entrées/sorties (E/S) de l’Arduino, à « haut » puis « bas »
niveau,
— et, en passant : apprendre à se méfier des calculs et mesurer l’importance des in-
terruptions.
Dans cette première séance, on utilisera l’Arduino seul, sans périphériques supplé-
mentaires, à l’exception d’un petit fil électrique.
Sur Arduino, la boucle infine est cachée, et contient une seule instruction : un appel à la
fonction loop. Cette fonction loop est donc le cœur du programme. Elle s’exécute de manière
répétée, indéfiniment, sitôt la fonction setup terminée.
1.2.1 Structure d’un programme Arduino
// déclarations de bibliothèques, variables globales, fonctions externes
void setup()
{
// initialisation
}
void loop()
{
// instructions de la boucle infinie
}
2
2.2 Question 2
On souhaite accroître la durée de la pause. Pour cela, remplacez la valeur 2500 par la
valeur 66000.
Que constatez-vous ? Corrigez le problème. Aide : affichez la nouvelle valeur limite du
compteur.
2.3 Question 3
Remplacez la fonction de « pause » par la fonction delay(ms), où ms correspond à la
durée de la pause en millisecondes.
La LED devra être allumée 1s toutes les 1,3s.
2.4 Question 4
On souhaite ici se passer des fonctions « haut niveau » de gestion des E/S.
Réalisez la même chose en remplaçant les appels de fonction pinMode et digitalWrite,
par des instructions opérant sur les registres du microcontrôleur dédiés aux E/S numériques.
Se référer à l’annexe 4.2.
Pour vérifier le bon fonctionnement du chenillard à défaut de LEDs, vous afficherez sim-
plement le contenu du registre PORTD, en binaire tant qu’à faire, via la fonction Serial.println
(qui accepte la constante BIN en second argument, pour spécifier un format de nombre bi-
naire) :
Serial.print(PORTD, BIN);
3
de bouton en reliant brièvement la tension à la masse (tension basse) à l’aide du fil fourni.
La broche reliée à la masse est marquée GND.
Pour programmer la broche en entrée et sa résistance interne de « pull-up », se référer à
l’annexe 4.2.2.
3.2 Question 1
Programmez le chenillard « virtuel », de manière à le faire tourner en permanence.
Même s’il n’y a que 4 LEDs (il pourrait y en avoir beaucoup plus !), essayez d’optimi-
ser/structurer un minimum votre code :
— évitez la redondance de code, grâce aux boucles, fonctions, éventuellement tableaux ;
— pensez aux opérateurs C++ de décalage de bits : >> et << ;
— pensez aux opérateurs logiques bit-à-bits (distincts des opérateurs logiques booléens !),
pour modifier un ensemble de bits d’un registre sans altérer les autres :
— OU, pour forcer des bits à 1 : |
— ET, pour forcer des bits à 0 : &
— NON, pour inverser des bits : ∼
3.3 Question 2
Modifiez le code précédent, de manière à déclencher le chenillard sur une mise à l’état
bas (= à la masse) de la tension de la broche 7.
3.4 Question 3
Observez l’incidence de l’instruction noInterrupts() en fin de setup. L’objectif de cette
question est de souligner l’importance des interruptions, qui seront étudiées plus tard.
4
4 Annexes
4.1 Programmation « haut niveau » des E/S de l’Arduino + liaison série
Les niveaux de tension des broches externes du microcontrôleur de l’Arduino peuvent être
contrôlés, soit en lecture (= entrée, du point de vue du microcontrôleur), soit en écriture (=
sortie).
La fonction pinMode a pour rôle de spécifier le sens d’utilisation des broches. L’orientation
se fait soit en sortie (valeur OUTPUT=1), soit en entrée (valeur INPUT=0), soit en entrée-« pull-
up » (valeur INPUT_PULLUP=2). Ce dernier mode connecte la broche à la source de tension
de l’arduino (5V) via une résistance de valeur importante (c’est la résistance de « pull-up »).
Grâce à ce mécanisme, même sans la relier à quoi que ce soit, la broche dispose donc d’une
tension « par défaut ».
Mais pour pouvoir travailler sur ce registre, il faut au préalable indiquer au microcontrô-
leur quelles broches sont en sortie (elles sont par défaut en entrée).
Les directions des broches d’E/S numériques sont contrôlées par les registres de direction
de port. Pour les 8 broches du port D, il s’agit du registre DDRD :
— un bit à 0 code une broche en entrée,
— un bit à 1 une broche en sortie.
5
2. d’interroger le registre de données de port correspondant pour lire leur état.
Finalement, les lectures de tension - des lignes en entrée ! - se font sur les registres d’entrée
de port : PIND, pour le port D.