Double appui; appui long; appui court;
Bonjour
Je me permets de vous écrire car j'ai un soucis d'algorithme en programmation en langage C.
voici mon problème :
J'ai un bouton poussoir j'aimerais quel me fasse trois actions différentes.
Un appui court allume la led1.
Un appui long allume la led2.
Un double appui rapide éteint les LEDs(led1 et led2).
Merci d'avance c'est dans le cadre de mon stage j'ai réussi à faire l'appui court et l'appui long mais j'arrive pas à faire le double appui.
programme
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #define BUTTON_POLLING_INTERVAL 20 //intervalles de lecture du bouton, en ms
#define COUNT_DEBOUNCE 10 //durée maximale autorisée de relâchement du bouton (en nombre d'intervalles)
#define COUNT_SHORT_PRESS 5 //durée mini d'un appui court (en nombre d'intervalles)
#define COUNT_LONG_PRESS 50
unsigned int releasedCount = 0;
unsigned totalCount = 0;
while(totalCount<COUNT_LONG_PRESS)
{
_delay_ms(20);
if((BOUT1)==0)
{
releasedCount=0;
totalCount++;
}
else
{
releasedCount++;
}
if(releasedCount>=COUNT_DEBOUNCE)
{
break;
}
}
//execution des actions apres appui
if(totalCount==COUNT_LONG_PRESS)
{
//inserer ici action appui long
//test2();
eteint_leds();
totalCount=0;
while((BOUT1)==0);
}
else if(totalCount>COUNT_SHORT_PRESS)
{
//inserer ici action appui bref
fonction_A();
PORTA |=(1<<PORTA0);
totalCount=0;
appui_bout1=1;
}
// action double appui
else if((appui_bout1==1)&&(totalCount>COUNT_SHORT_PRESS))
{
eteint_leds();
appui_bout1=0;
} |