opakovaný stisk tlačítka

Odpovědět
Ludek
Příspěvky: 291
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

opakovaný stisk tlačítka

Příspěvek od Ludek » 16 črc 2020, 14:33

Zdravím, trápím se s trivialitou.
Potřebuji do stávajícího programu dostat takovou maličkost. Program běží a dělá co má, to s tím nesouvisí.
Ale jakmile stisknu tlačítko 3x musí bliknout LED ( a současně s tím uložím nějakou proměnnou do EEPROM )
Pokud stisknu jen 2x nebo jen 1x nestane se nic. Víckrát to nevadí, akce proběhne po třetím stisku a uvolnění.
Interval je - stisk cca 300/300 ms plus mínus - myslím, že se to dá 3x stisknout do 3 vteřin...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: opakovaný stisk tlačítka

Příspěvek od KamilV » 16 črc 2020, 15:59

Udělej si počítadlo stavu, každé stisknutí jej navýší o +1, každý interval beze stisku (např. 1000 ms) ho vynuluje.
Pokud je počítatdlo == 3, provedeš akci.

Budeš si tedy uchovávat millis() posledního stisku, pokud bude při dalším stisku miliis() - poslední větší než nastavená mez (např. těch 1000), bude počítadlo = 1.

Ludek
Příspěvky: 291
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: opakovaný stisk tlačítka

Příspěvek od Ludek » 16 črc 2020, 18:08

Asi to myslíš správně, ale já špatně chápu... nedaří se mi zajistit,
aby to počítání času začalo až s prvním stiskem tlačítka :-(

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: opakovaný stisk tlačítka

Příspěvek od martinius96 » 16 črc 2020, 18:18

V momente prvého stisku si ulož čas millis() a k tomu už len doplníš danú logiku o počte stlačení a časového rámca od tohto času.

Ludek
Příspěvky: 291
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: opakovaný stisk tlačítka

Příspěvek od Ludek » 16 črc 2020, 18:25

Tak už mi to šlape, díky ! ale přeteče to !!! I když dám Long nebo Double, stejně by to někdy přeteklo...
Dá se millis() občas vynulovat?

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: opakovaný stisk tlačítka

Příspěvek od KamilV » 16 črc 2020, 19:33

Není nutné zachytávat čas prvního stisku (i když je to taky možné), jednodušší je uchovávat čas posledního stisku a to je taky použitelné, zajímá Tě rozestup, pokud stisknu 2x a pak 5 vteřin nic, tak další stisk už je zase 1.

Jinak přeteče co? Millis() jednou za čas přeteče sám, o to se nemusíš nijak starat... Principiálně v tom problém není.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: opakovaný stisk tlačítka

Příspěvek od ondraN » 16 črc 2020, 19:49

počítadlo času v arduinu je definovalé jako uint32_t a přeteče jednou za cca 50dní. Vynulovat se nijak nedá (jedině provedením SW nebo HW resetu). Přetečení v tomhle případě řešit nemusíš, protože když to náhodou stiskneš v okamžiku přetečení, tak se ti ten druhý stisk zaregistruje, jako by od prvního uběhla moc dlouhá doba. Jinak, šance že se zrovna trefíš do toho okamžiku je asi stejná, jako vyhrát první pořadí ve sportce desetkrát za sebou :mrgreen:

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti