Megszakítás egy bizonyos idő letelte után

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
holex
Biztosítékgyilkos
Hozzászólások: 70
Csatlakozott: 2013. október 29. kedd, 1:35

Megszakítás egy bizonyos idő letelte után

Hozzászólás Szerző: holex »

Meg lehet-e oldani Arduino alatt azt, hogy bármilyen gombnyomás esetén egy számláló nullázódik és a kijelző háttérvilágítása bekapcsol, majd egy megadott idő letelte után automatikusan generálódik egy megszakítás ami lekapcsolja. Tehát lehet-e timert megszakításként használni? Ha igen, akkor hogy? Erre azért van szükség, mert a gombnyomásokat megszakításként kezelem, megszakításban pedig egy delay(30000) nem lenne túl praktikus...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Megszakítás egy bizonyos idő letelte után

Hozzászólás Szerző: Robert »

Lassan a fórumon a teljes feladatodat megoldjuk. Ebből nem tanulsz, csak foltokat. Legközelebb valami javaslat, hogy ezt néztem ki, de valamiért nem értem/nem úgy megy ahogy szeretném. Ezt tettem eddig, és ez az eredmény... (Nem bántani akarlak, csak tapasztalat, hogy a foltokban levő tudás sokkal veszélyesebb bármi másnál. Később nehezebb tanulni és a foltokat is rosszabb összerakni.)

Használd az eltelt időt:

Kód: Egész kijelölése

most=millis();
ha millis()>= most+2000 {hatter lekapcsol} 
Timer-t nem illik erre pazarolni (abból mindig kevés van). Timer0: idő: millis(), Microseconds(), ...
Timer0,1,2: PWM (lábfüggő)
Timer1: servo
dlaszlo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. április 20. szombat, 6:38

Re: Megszakítás egy bizonyos idő letelte után

Hozzászólás Szerző: dlaszlo »

Ebben van ilyen (timer-es megoldás), az lcd_timout körüli dolgokat nézd: https://github.com/dlaszlo/Aquarium/blo ... uarium.cpp
A display_timeout pedig a "főképernyőre" ugrásért felel egy bizonyos idő eltelte után.

A megszakítás nem "bizonyos" idő eltelte után van (pl 20 másodperc), hanem másodpercenként (a példa progiban negyen másdpercenként van a timer, mert mást is csinál), és egyszerűen csak visszaszámlál egy változót.
A változó kezdeti értéke annyi, ahány másodperc után le kell kapcsolni az lcd-t.
A főciklusban ha a változó elérte a 0-t, akkor lekapolja a progi az lcd-t.
Ha valami esemény van, akkor ott a program visszaállítja a változó értékét az eredetire, így újra kezdődik a visszaszámlálás, nem kapcsol le az LCD.
A millis() amit Róbert írt, az még egyszerűbb.

Üdv!
Válasz küldése