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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
TICK T0_Time;
TICK T1_Time;
...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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,