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 | |
| 200 | Deux variables globales: |
| 201 | {{{#!c |
| 202 | BP_ON = 0 // mis à 1 si le bouton a été appuyé, mis à 0 quand la tâche qui attend l'appui a vu l'appui |
| 203 | BP_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 | |
| 206 | Pseudo-code pour la détection du changement d'état du bouton |
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 |
| 221 | finfaire |
| 222 | }}} |
| 223 | |
| 224 | Pseudo-code pour l'utilisation du changement d'état du bouton |
| 225 | |
| 226 | {{{#!c |
| 227 | si BP_ON alors |
| 228 | BP_ON <- 0 // l'appui est un événement ponctuel |
| 229 | comportement quand un appui est detecte |
| 230 | fsi |
| 231 | si BP_OFF alors |
| 232 | BP_OFF <- 0 // Le relâchement est un événement ponctuel |
| 233 | comportement quand un relâchement est détecté |
| 234 | fsi |
| 235 | }}} |
| 236 | |