Close

Odpověď na: Měření doby stisku tlačítka

Úvodní stránka Fórum Software Jazyky Jazyk Wiring Měření doby stisku tlačítka Odpověď na: Měření doby stisku tlačítka

#12077
posjirka
Účastník

pouzij funkci pulsein()
https://www.arduino.cc/en/Reference/PulseIn

má parametry :
číslo pinu (1-xx)
na jakou hodnotu reagovat (LOW / HIGH)
a případně max. dobu čekání na konec pulzu v ms.

takže např:

`unsigned long delkaStisku = pulseIn(5, LOW, 500);‘

ti do proměnné delkaStisku typu unsigned long zapíše dobu úrovně LOW na pinu 5.
Max doba čekání je 0,5s (500ms). Je třeba si uvědomit, že na tu dobu se ovšem arduino „zastaví“ a čeká na konec pulzu. Stejně tak když na začátku této funkce bude pin 5 v log. 1 (HIGH) tak ti napíše „0“ a pokračuje dál….

pomocí millis to jde řešit elegantnějí, záleží na přesnosti měření.
Ve výsledku to jde pomocí millis řešit 3 způsoby:
– ve smyčce loop() budeš při každém průchodu testovat zde je nebo není stisknuto tlačítko (zapíšeš do proměné „start“) a po změně stavu (po uvolnění tlačítka) si vyhodnotíš aktuální stav millis()-start . Ten rozdíl je doba stisku. Vše je ale závislé na čase potřebném k vykonání 1 smyčky. To je vlastně 1 krok/stupeń rozlišení měření.
– druhá varinta je použít přerušení. Na nějákém pinu (defaultně je to tuším 2 a 3, ale dají se i přesunout na jiné piny) si nastavíš, že když se změní stav na tomto pinu tak si zapíšeš do proměnné opět strat (stisk) případně aktuální stav millis (uvolněno tl.) a do proměnné si zapíšeš rozdíl. Tady je přesnost na 1ms a dá se zvýšit i na 1us použitím funkce micros(). Reaguje okamžitě jen proměnná musí mít přívlastek violetile aby šla jeho hodnota použít i v hlavní smyčce.
https://www.arduino.cc/en/Reference/Volatile
– 3 varinata je vlastně kombinace. můžeš třeba pomocí časovače timer2 nastavit přerušení každé 2ms a otestovat si tvůj pin. … vše ostatní už jsem psal výše.

Každé má svoje a je důležité podívat se na to jako na celek. Když totiž zabereš 1 funkci na něco (třeba časovač timer 2) už jí nemůžeš použít na neco jiného (servo, tone, SW serial, …). když použiješ hlavní smyčku (var.1) tak jí nesmíš dlouho ničím zdržovat, jinak si nakopáváš měření. Varinta 2 je zase omezena defaultně na max. 2 piny. ty se dají přesouvat, můžeš dokonce i zvětšit počet pinů na 16 (2 porty po 8 pinech), ale pak třídíš a hodnotíš každý pin zvláš´t…

snad jsem pomohl