Ako som napísal, fn_inic_tl sa spúšťa iba raz na začiatku.
Premennú stary_stav_tl nastavíš podľa stavu v aktualny_stav_tl, to je myslím zrozumiteľné. Aby sa negenerovali falošné hrany. V prípade vyhodnotenia tlačítok by to možno nemuselo byť až také kritické, ale rutina sa dá použiť pre vyhodnotenie binárnych vstupov všeobecne a asi by nebolo vhodné, ak by sa pri náhodnom reštarte zariadenia pripočítal fantómový impulz napríklad z impulzného vodomera, alebo elektromera. Zamozrejme za predpokladu, že zariadenie je správne navrhnuté a nemá počty impulzov uložené iba v RAM, ale ukladá si ich po každom impulze napríklad do FRAM.
Čas nábežnej a dobežnej hrany si urči ako chceš. Za predpokladu, že kľudový stav na tlačítku je log. 0, potom môžeš nastaviť čas pre nábežnú hranu extrémne krátky. Kľudne aj 1ms. Tlačítko bude reagovať prakticky okamžite. No čas pre dobežnú hranu treba nastaviť tak, aby bol dlhší ako jednotlivé zákmity. Napríklad 10-20ms pre dobežnú hranu je +/- praxou osvedčený čas. Nikdy som zákmity nesledoval osciloskopom. Ak nastavíš čas nábežnej hrany dlhší ako 40-60ms, už bude mať obsluha dojem, že tlačítko dobre nereaguje a bude mať tendenciu tlačítko silnejšie stláčať. Vyskúšaj si to, je to zaujímavý experiment.
Pri vyhodnotení binárneho stavu cez optočlen na ktorého vstupe je striedavý prúd, je vhodné nastaviť nábežný čas na 2-5ms (do polky jednej periody) a dobežný čas napríklad na 40-60ms, čo zodpovedá vynechaniu dvom trom periódam signálu.
Osobne používam na tlačítka čas 15ms a 15ms.
Ešte malá poznámka k tlačítkam. Najčastejšie používam zariadenie s troma tlačítkami, niekedy si z rozmerových dôvodov musím vystačiť i s dvoma. Preto je praktické využívať tiež ich kombinácie.
1.príklad
EDIT/ENTER
SIPKA_HORE
SIPKA_DOLE
a SIPKA_HORE + SIPKA_DOLE je ESCAPE
2.príklad
EDIT/ENTER
SIPKA_HORE
a EDIT/ENTER + SIPKA_HORE je SIPKA_DOLE
ESCAPE je v oboch prípadoch tiež vyhodnotený, ak žiadne tlačítko nie je stlačené napríklad 5 sekúnd.
Takže klasicky si šípkami prejdem na položku ktorú chcem editovať, stlačím EDIT/ENTER, číslo/text sa rozbliká a teraz šípkami editujem jeho hodnotu. Opätovným stlačením EDIT/ENTER hodnotu potvrdím.
Samozrejme dlhšie podržanie šípky spúšťa autoinkrement/dekrement hodnoty, ktorý sa tiež s časom zrýchľuje.
No a ak sa nad tým trochu zamyslíš, zistíš, že takto postavená rutina nemôže vyhodnocovať stlačenie tlačítka EDIT/ENTER, ale jeho pustenie a to ešte v závislosti od toho, či počas držania tlačítka EDIT/ENTER bola stlačená SIPKA_HORE. Nie je to nič zložité, funguje to spoľahlivo a pre obsluhu primerane intuitívne.
No a samozrejme niekedy je tiež vhodná nejaká kombinácia kláves pre uvedenie zariadenia do defaultného stavu. Pri troch tlačítkach sa dá využiť kombinácia stlačenia všetkých troch naraz, ak toto stlačenie trvá napríklad 10 sekúnd. Dostatočne sa tým zabráni nežiadúcej reakcii pri ich náhodnému súčastnému zatlačeniu.
No a potom asi budeš chcieť, aby po dlhšom nič nerobení s tlačítkami sa na display automaticky prepínalo zobrazenie vybraných hodnôt.
Jednoducho si to zabezpečíš tak, že tieto hodnoty si uložíš na začiatok menu. V móde “nič nestláčania” bude program obsluhujúci klávesnicu automaticky simulovať jej stláčanie, napríklad SIPKA_HORE s tým, že keď dosiahne max.hodnotu v menu pre automatickú zmenu (napríklad 8 položiek), menu pôjde zase od začiatku. Ak sa stláča klávesnica fyzicky, potom je max.hodnota v menu zmenená (napríklad 18). A tiež funguje, že pokiaľ sa príde na najvyššiu položku, začne sa menu prehľadávať od začiatku.
Výhoda prístupu k simulácii stláčania klávesnice (dobrý čas sú 2-3 sekundy na zmenu údaja) je, že kvôli tomu nemusíš rozbabrávať samotný systém zobrazovania. Ten sa správa ako by sa klávesnica naozaj stláčala, len si na základe nejakého príznaku (tiež načítaného z modulu vyhodnotenia tlačítok) zmení max položku po ktorú má ísť pri “stláčaní” tlačítok SIPKA_HORE a SIPKA_DOLE.
No a samozrejme rovnako je to aj s parametrami, ktoré majú byť viditeľné/prístupné cez nejaké heslo. Heslo si vlož na najvyššie miesto normálne prezerateľných údajov a keď je správne, potom len rozšír počet zobraziteľných položiek smerom hore. Nezabudni naprogramovať automatické zrušenie hesla, ak sa s klávesnicou nepracuje primerane dlho (napríklad 4-5 minút).
Môj zobrazovací modul funguje tak, že každá zobrazovaná položka má niekoľko príznakov, napríklad:
-
text pred zobrazeným údajom, ukazateľ na text uložený vo Flash
-
text za zobrazeným údajom, ukazateľ na text uložený vo Flash
-
meno premennej (alebo index z poľa premenných na to určených)
-
minimálna zobrazená hodnota , pod ňou sa automaticky zobrazí LLLL
-
maximálna zobrazená hodnota, nad ňou sa automaticky zobrazí HHHH
-
či sa má zobraziť číslo, alebo substitučný text z poľa textov (z Flash), kde hodnota čísla určuje index v poli textov. Ak má hodnota iba stav 0 a 1, potom miesto týchto čísel viem ľahko zobraziť ZAPNUTY/VYPNUTY, alebo ANO/NIE a tak podobne
-
či je položka editovateľná všeobecne
-
či je položka editovateľná len pri zadanom správnom hesle
-
minimálna editovateľná hodnota
-
maximálna editovateľná hodnota, ak napríklad chcem premennú iba nulovať, min. a max. editovateľné hodnoty nastavím na nulu.
-
hodnota je bitova alebo 1/2/4 bajtová so znamienkom alebo bez. číslo
-
počet desatinných miest, napríklad integer položku s hodnotou 16230 viem zobraziť ako 16.23 bez toho aby som používal float.
-
počet miest na displayi pre zobrazenie hodnoty, jednak je to dobré na vyčistenie si znakov po predchádzajúcej hodnote pred zobraením novej, ale i na to aby som mohol číslo zobraziť v maximálne prípustnom rozlíšení. Napríklad v štyroch miestach na premennú a troma desatinami zobrazím hodnotu 16235 ako 16.23 a hodnotu 1456 ako 1.456. Takže zobrazenie desatinnej bodky sa automaticky dynamicky posúva.
To znamená, že máš základnú rutinu pre pohyb v menu.
Tá si udržuje si index, kde v menu sa nachádza a volá rutinu pre info o stave klávesnice. Podľa stavu klávesnice sa táto rutina posúva v menu alebo si edituje hodnotu podľa zadaných parametrov. A nakoniec táto hlavná rutina potom volá rutinu pre prípravu zobrazenia hodnoty podľa zadaných parametrov (uvedených vyššie). A táto potom volá samotný interface pre komunikáciu s tým ktorým displayom, tak aby sama o sebe bola hw nezávislá.
Môže sa to takto na prvý pohľad zdať byť komplikované, ale nie je.
Táto parametrizácia veľmi ulahčuje život už od druhého zariadenia s menu. Veľmi to oceníš. Je potom veľmi jednoduché pridať/ubrať premenné, ktoré chceš sledovať napríklad pre ladiace účely.
A odtiaľto je len krôčik k systému, v ktorom sa z hlavného menu vojde do submenu, prípadne do subsubmenu.
Tak daj vedieť, ako si pokročil.