Bonjour,
Je suis bloqué sur une petite fonctionnalité tout simple, que j'essaie de mettre en œuvre :
J'ai un bouton poussoir qui au repos est au niveau haut, une pression sur celui-ci génère un niveau bas.
- Je voudrai, que lorsque j'appuie un court instant ( disons 1/2s ) sur celui ci il se produise une action 1.
- Si l'appuie sur ce bouton plus longuement ( >3s ) alors c'est l'action 2 qui sera exécutée.
Mon code dispose de moyens pour capturer et mesurer le temps de façon précise ( TICK ) , ce qui me pose pb c'est le codage de la fonctionnalité elle-même.
J'ai écris ceci, voici le comportement constaté :
1 court appuie : l'action 1 est executée
1 long appuie : l'action 1 et l'action 2 sont executés.
-> mon pb se situe ici justement : je voudrai que ce soit QUE l'action 2 qui soit exécutée.
1 2
| TICK T0_Time;
TICK T1_Time; |
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| if (BUTTON1_IO == 0) T0_Time = TickGet();
while(BUTTON1_IO == 0)
{
if ((TickGet() - T0_Time <= TICK_SECOND/2))
{
// ACTION 1
LED1_IO = 1;
}
if ((TickGet() - T0_Time >= 3*TICK_SECOND))
{
// ACTION 2
LED2_IO = 1;
}
} |
Peut être faut il partir différemment, capturer le temps T0 dès lors que le BP est appuyé ( génération d'un niveau bas) , attendre son retour au niveau haut : capturer le temps T1
->
si T1 - T0 >= 0.3s --> Action 1
si T1 - T0 >= 3s --> Action 2
avec qqchose de ce style :
if (TickGetDiff(T1_Time, T0_TIME) >= 3*TICK_SECOND)
Je n'ai pas réussi à coder cela, car je ne vois pas comment coder l'acquisition de T1 qui correspond au retour du BP au niveau haut
Pouvez vous m'aider svp ?
Je vous remercie,
Partager