Activité : double boutons

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.

Le résultat final devra faire l’objet d’une courte vidéo, à envoyer au professeur également.

 

Prérequis : réaliser l’activité Commuter avec un bouton poussoir.

Objectif :

Dans le cours sur les fonctions logiques, et plus particulièrement à propos des chronogrammes, nous avons énoncé la règle suivante :

Deux entrées physiquement indépendantes ne peuvent pas changer simultanément.

Ceci est physiquement impossible !!!

L’objectif de cette activité est de réaliser un montage et un programme avec 2 boutons afin de démonter qu’il existe toujours un délai entre les 2 événements d’appui sur ces boutons.

L’écart de temps entre les deux appuis sera affiché dans le moniteur série, en microsecondes.

 

Ressources :

 

Matériel nécessaire :

  • 2 boutons poussoir
    FZ_Bouton  FZ_Bouton
  • une LED verte et sa résistance associée

        FZ_220ohm     

 

 

Travail demandé

Réaliser le câblage des 2 boutons et de la LED. ATTENTION à bien utiliser les 2 ports numériques interruptibles !

 

 

On se propose de réaliser un programme qui mesure le temps écoulé entre deux appuis sur les boutons A et B (quel que soit l’ordre chronologique). Voici comment il doit fonctionner :

  • Dans la fonction setup, on initialise le port série et on configure les ports,
  • on lance une fonction attente (voir plus loin) pour attacher des interruptions aux boutons.
  • dans la boucle principale loop:
    • on affiche l’état du dispositif par une LED (allumée = « prêt »)
    • si une mesure est prête (fini == true) :
      • on affiche le résultat, 
      • on met en pause le dispositif via la fonction attente :
        • désactivation des interruptions,
        • pause de 1 seconde,
        • réactivation des interruptions.

Dans chacune des ISR :

  • si le bouton est le premier des 2 qui a été pressé (pret == true) :
    • on mémorise le nom de ce bouton
    • on démarre le chronomètre
  • si le bouton est le deuxième à avoir été pressé :
    • on mémorise l’écart entre les 2 instants (variable premier)
    • on déclare qu’une mesure est prête (fini = true)

 

 

  • Créer un nouveau skecth avec le code suivant (c’est une ébauche !) :
int pin_LED = 13;           // port numérique associé à la LED intégrée
int pin_buttonA = 2;        // port numérique lié au bouton poussoir A
int pin_buttonB = 3;        // port numérique lié au bouton poussoir B

volatile unsigned long t0 = 0;  // 
volatile unsigned long dt = 0;  // écart de temps entre les 2 boutons (micro secondes)
volatile char premier = ' ';    // premier bouton pressé
volatile bool pret = false;     // le dispositif est prêt
volatile bool fini = false;     // la mesure est terminée

void setup() {
    Serial.begin(115200);
    pinMode(pin_LED, OUTPUT);   // réglage du port de la LED en mode SORTIE
    pinMode(pin_buttonA, INPUT_PULLUP);
    pinMode(pin_buttonB, INPUT_PULLUP);
    attente();
}

void loop() {
    digitalWrite(pin_LED, pret);
    if (fini) {     // la mesure est terminée
        Serial.print(premier);  
        Serial.print(' ');
        Serial.println(dt);
        attente();
        fini = false;
    }
}

/* Mise en pause du dispositif pendant 1 seconde */
void attente() {
    detachInterrupt(0); // 0 = interruption liée au port 2
    detachInterrupt(1); // 1 = interruption liée au port 3
    delay(1000);
    attachInterrupt(...);
    attachInterrupt(...);
    pret = true;
}

void boutonA() {
    if (pret) {
        t0 = micros();  // début chronomètre
        pret = false;
        premier = 'A';
    } else {
        dt = micros() - t0; // fin chronomètre
        ...
    }
}


void boutonB() {
    if (pret) {
        t0 = micros();  // début chronomètre
        pret = false;
        premier = 'B';
    } else {
        dt = micros() - t0; // fin chronomètre
        ...
    }
}

 

Compléter le programme (remplacer les ...) afin qu’il répondre au comportement attendu.

 

Réaliser une courte vidéo du comportement et l’envoyer au professeur.

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *