Vous répondrez aux questions sur un document texte (MS Word ou LibreOffice Writer), à envoyer au professeur.
La présentation doit être claire, concise, soignée, et comporter des captures d’écran et/ou photos pertinentes.
Câblage d’un bouton poussoir
- Consulter avec attention la page concernant les boutons poussoirs.
- Câbler un bouton (connecté au port numérique 2, c’est important pour la suite)

Quel est le rôle de cette résistance dans le circuit ?
Programmation
Acquisition par lecture de l’état du port
L’objectif est d’acquérir l’action d’un utilisateur sur le bouton, pour allumer/éteindre une LED
- Créer un nouveau skecth avec le code suivant :
int pin_LED = 13; // port numérique associé à la LED intégrée
int pin_button = 2; // port numérique lié au bouton poussoir
int state = LOW; // variable d'état de la LED
void setup() {
pinMode(pin_LED, OUTPUT); // configuration du port de la LED en mode SORTIE
pinMode(pin_button, INPUT); // configuration du port du bouton en mode ENTRÉE
}
void loop() {
if (digitalRead(pin_button) == HIGH) { // si le bouton est pressé ...
state = !state; // ... inversion de la variable d'état de la LED (allumée<->éteinte)
}
digitalWrite(pin_LED, state); // action sur la LED (allumage ou extinction)
}
Que devrait-il se passer lors du premier appui sur le bouton poussoir ?
- Câbler une LED (sur le port numérique 13),
puis téléverser le code dans l’Arduino.
Décrire ce qui se produit réellement lorsqu’on appuie ou relâche le bouton poussoir. Donner le nom de ce phénomène.
Utilisation d’une interruption
Pour remédier au problème, on utilise une interruption.
- Consulter avec attention la page concernant les interruptions.
- Créer un nouveau skecth avec le code suivant :
int pin_LED = 13; // port numérique associé à la LED intégrée
int pin_button = 2; // port numérique lié au bouton poussoir
volatile int state = LOW; // variable d'état de la LED (précédée de volatile)
void setup() {
pinMode(pin_LED, OUTPUT); // configuration du port de la LED en mode SORTIE
pinMode(pin_button, INPUT); // configuration du port du bouton en mode ENTRÉE
attachInterrupt(digitalPinToInterrupt(pin_button), blink, CHANGE);
}
void loop() {
digitalWrite(pin_LED, state); // action sur LED (allumage ou extinction)
}
void blink() {
state = !state; // inversion de la variable d'état de la LED
}
Dans ce programme, quel élément est appelé ISR (Interrupt Service Routine) ?
Dans quel état devrait se trouver la LED lorsque l’utilisateur appuie puis relâche le bouton poussoir ?
Par quelle constante faut-il remplacer
CHANGE dans le programme pour avoir le même comportement qu’attendu à la question 2 ?
Décrire ce qui se passe et vérifier que le comportement est conforme à celui attendu.
Simplification du câblage
L’Arduino est doté d’une résistance interne qui autorise à se passer de la résistance de \(10\;\mathrm{k\Omega}\), et par conséquent de simplifier le montage du bouton :

De quel type de résistance s’agit-il ?
- Consulter à nouveau la documentation concernant cette résistance.
Modifier le programme précédent afin d’utiliser cette fonctionnalité de l’Arduino et ce câblage simplifié. Le comportement attendu est toujours celui évoqué à la question 2 !!
Activités
Pour en savoir plus ...
- La fonction
attachInterrupt: https://www.arduino.cc/en/Reference/AttachInterrupt - Les interruptions Arduino : https://www.arduino.cc/en/Reference/Interrupts
