Commuter à l’aide d’un bouton poussoir

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

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 ?
×

 

  •  Téléverser le code dans l’Arduino.
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 ?
×

 

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 ...