Changes between Version 17 and Version 18 of IOC20_T01


Ignore:
Timestamp:
Jan 30, 2020, 5:40:28 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC20_T01

    v17 v18  
    196196
    197197* Écrivez un programme `read_bp.c` qui configure la GPIO 18 en entrée (là où est connecté le bouton poussoir) et qui affiche la valeur de ce GPIO dans une boucle infinie.
    198 * On veut maintenant détecter l'appui sur le bouton poussoir. Pour cela reprenez le programme `blink01_pt.c` et faite une copie en `blink01_bp_pt.c`. Dans un pthread, vous allez lire la valeur du bouton périodiquement toutes les 20ms. L'appui ou le relâchement est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la pin est à 1. La structure du programme suggéré. Commencer par tester que vous savez détecter l'appui sans gérer les LEDs.
     198* On veut maintenant détecter l'appui sur le bouton poussoir. Pour cela reprenez le programme `blink01_pt.c` et faite une copie en `blink01_bp_pt.c`. Dans un pthread, vous allez lire la valeur du bouton périodiquement toutes les 20ms. L'appui ou le relâchement est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la pin est à 1. Commencer par tester que vous savez détecter l'appui sans gérer les LEDs.
     199
     200Deux variables globales:
     201{{{#!c
     202BP_ON = 0   // mis à 1 si le bouton a été appuyé, mis à 0 quand la tâche qui attend l'appui a vu l'appui
     203BP_OFF = 0  // mis à 1 si le bouton a été relâché, mis à 0 quand la tâche qui attend le relâchement a vu le relâchement
     204}}}
     205
     206Pseudo-code pour la détection du changement d'état du bouton
    199207{{{#!c
    200208val_prec = 1
    201209val_nouv = 1
    202 BP_ON = 0
    203 BP_OFF = 0
    204 faire toujours:
     210faire toujours
    205211   attendre 20ms
    206212   val_nouv <- valeur du BP
    207    si (val_prec != val_nouv) ET (val_nouv == 0) (appui est detecte) alors BP_ON <- 1
    208    si un relachement est detecte alors BP_OFF <- 1
    209    si BP_ON :
    210       BP_ON <- 0                   // l'appui est un evenement ponctuel
    211       comportement quand un appui est detecte
    212    si BP_OFF :
    213       BP_OFF <- 0                  // Le relachemet est un évènement ponctuel
    214       comportement quand un relachement est detecte
    215 }}}
     213   si (val_prec != val_nouv) alors   // changement d'état
     214      si (val_nouv == 0) alors       // appui détecté
     215         BP_ON <- 1
     216      sinon                          // relachement détecté
     217         BP_OFF <- 1
     218      fsi
     219      val_prec = val_nouv
     220   fsi
     221finfaire
     222}}}
     223
     224Pseudo-code pour l'utilisation du changement d'état du bouton
     225
     226{{{#!c
     227si BP_ON alors
     228   BP_ON <- 0                   // l'appui est un événement ponctuel
     229   comportement quand un appui est detecte
     230fsi
     231si BP_OFF alors
     232   BP_OFF <- 0                  // Le relâchement est un événement ponctuel
     233   comportement quand un relâchement est détecté
     234fsi
     235}}}
     236
    216237* Ensuite, modifier le programme pour faire fonctionner la led0 en télérupteur (un appui changer l'état de la led) alors que la led1 continue de clignoter périodiquement.
    217238