Krmiljenje grafičnega LCD-ja s folijo občutljivo na dotik (touch screen) je vedno zanimiva tematika na seminarjih. Na 3. Bascom seminarju smo prikazali možnost uporabe kalibracije touch panela v 16 ali v 4 točkah.
Uvod
Grafični prikazovalniki se v Sloveniji lepo uporabljajo ravno zaradi enostavnosti uporabe s pomočjo Bascom-AVR programskega jezika. Demo verzija Bascom-AVR programa omogoča, da uporabnik prikaže eno sličico na zaslonu, za prikaz več sličic pa je že potrebno kupiti licenčno verzijo. Glede na zmogljivosti, ki jih licenčna verzija ponuja, to niti ni tako draga »investicija«. Z nakupom licenčne verzije tudi podpiramo avtorja Bascoma, da bo še naprej skrbel za podporo tega izredno praktičnega orodja.
Za prikaz slike (v eni ali več barvah, odvisno od uporabljenega prikazovalnika) na grafičnem LCD-ju moramo najprej sličico narisati, ali pa jo ustrezno pomanjšati na velikost našega prikazovalnika. Če uporabljamo 128×64 velik prikazovalnik, potem je potrebno sliko temu primerno grafično pripraviti v ustreznih programih, kot so Slikar, Corel in drugi.
Kalibracija
Kalibracija v obeh primerih (4 ali 16 točk) poteka tako, da na določenih mestih grafičnega LCD-ja prikažemo tipko, na katero je potrebno pritisniti. S pritiskom na prikazano površino shranimo izmerjeno vrednost v EEPROM za kasnejšo uporabo. Predvsem to pride prav takrat, ko ne želimo ob vsakokratnem vklopu prikazovalnika ali naše naprave ponavljati kalibracije.
V kolikor bi to vendarle želeli (npr. da želimo kalibrirati pritisk s prstom namesto s plastično paličico), potem po reset-u pritisnemo tipko PD.0 in jo držimo toliko časa, dokler se na prikazovalniku ne pojavi izpis: Kalibracija.
Kalibracija v 16 točkah
Kot pove naslov, kalibracija poteka v 16 točkah. Na grafični LCD zaslon rišemo serijo slik, ki predstavljajo naše tipke, kot na primer glej sliko 1 in tako naprej do zadnjih »tipk« slika 2. V kolikor smo tipko pritisnili dobro, se bo prikazal izpis, glej sliko 3, v kolikor pa nismo pritisnili tipke ali pa smo jo pritisnili slabo, se bo izpisalo obvestilo slika 4 in prikazala se bo slika tipke, katere nismo pritisnili. Ko smo pritisnili vseh 16 tipk se pojavi prazen zaslon, program čaka na pritisk tipke.
Opis programa
Na začetku programa izvedemo inicializacijo grafičnega prikazovalnika, konfiguriramo ADC pretvornik (ki ga potrebujemo pri pretvorbi analognih signalov touch folije), definiramo spremenljivke in funkcijo. Spremenljivki Tipkax(17) in Tipkay(17) definiramo kot ERAM, določimo, ali želimo kalibracijo in skočimo v glavno Do-Loop zanko.
Opis funkcije
Delovanje funkcije, ki ugotovi, če je neka tipka pritisnjena, lahko razložimo z sliko 5. Za vsako tipko (na primer Tipko 27), ki jo bomo prikazali na grafičnem prikazovalniku, si v tabelo shranimo le x in y
položaj središčne točke (Tocka_X (27), Tocka_Y (27)), ki leži na presečišču diagonal znotraj te tipke. X položaju točke prištejemo neko vrednost (na primer 35), ki predstavlja toleranco na koordinatah X, ki smo jo še pripravljeni sprejeti. Dobimo največjo vrednost X, ki nam še pomeni pritisk te tipke. Potem od X položaja središčne točke odštejemo velikost tolerance, s čimer dobimo najmanjšo vrednost X, ki nam lahko še pomeni pritisk na to tipko. Enako naredimo z Y koordinato središčne točke te tipke in dobimo največjo in najmanjšo vrednost Y, ki smo ju še pripravljeni sprejeti kot pritisk na tipko, ki jo trenutno preverjamo . Funkcija nam preveri, če se koordinate trenutnega dotika ujemajo s koordinatami katere od množice točk, ki se nahajajo znotraj modrega šrafiranega področja (glej sliko!). Če se ujemajo, je ta tipka pravkar pritisnjena in funkcija vrne kot rezultat vrednost 1, v nasprotnem primeru vrne vrednost 0. Glede na vrednost, ki jo je vrnila funkcija, se odločamo za različne sklope akcij, ki so predvidene ob pritisku na posamezno tipko.
Funkcijo pokličemo tako, da njeno vrednost priredimo neki spremenljivki tipa Byte, ker tudi funkcija vrača rezultat tipa Byte. Ob klicu funkcije v oklepaju navedemo številko tipke, za katero želimo preveriti, če je bila morda pritisnjena. Ta številka je pomembna pri indeksiranju spominskih lokacij, kjer imamo shranjene koordinate X in Y središčnih točk za vse tipke. S pomočjo te funkcije lahko ugotavljamo, če je pritisnjena katera od vseh naših tipk v kakšni For-Next zanki, brez velike porabe dragocenega podatkovnega prostora, glej sliko 6.
Opis subrutin
Subrutina »Kalibracija« prebere vrednosti iz touch folije in jih shranjuje v pozicije spremenljivk za X in Y od 1 do 16. Ob začetku kalibracije se na zaslonu izriše prva tipka in program pričakuje pritisk na to tipko. Tako za vsako od 16 tipk shranimo vrednosti, ki jih dobimo ob vsakem pritisku na touch folijo.
Subrutina »Readtouch« bere vrednosti iz touch folije. Vrednost prebere v For-next zanki zato, da dobimo neko poprečno vrednost in da se znebimo neveljavnih vrednosti.
Subrutina »Prit_tipke« prikaže ustrezno sliko na grafičnem zaslonu glede na shranjeno vrednost. Subrutina deluje tako: ob pritisku program zazna neko vrednost, ki jo primerja s 16 shranjenimi vrednostmi. Ker imajo vrednosti svojo +/-odstopanje, ki ga definiramo v funkciji, lahko zelo dobro pokrijemo celotno področje touch folije.
Program kalibrira touch folijo in grafični prikazovalnik na 16 mestih. S praktično uporabo se je izkazalo, da je takšna kalibracija časovno potratna, vendar pa zaradi shranjenih vrednosti kalibracije v EEPROM se ob naslednjih vklopih to izkaže kot prednost, saj je delovanje te rutine zelo hitro. Ponovne kalibracije ni potrebno opravljati v kolikor ne zamenjamo »medija« pritiska, ki je lahko človeški prst ali plastična paličica (ne sme biti oster predmet, ki bi poškodoval touch folijo!!).
Kalibracija v 4 točkah
Drugi možni način je kalibracija v 4 točkah. Podobno kot predhodnem primeru na grafičnem prikazovalniku prikazujemo tipke. Tokrat prikažemo samo 4 tipke v vogalnih pozicijah na sliki 7. Vse ostale pozicije program izračuna iz vrednosti, ki smo jih pridobili iz kalibracije. Opis subrutin je enak v tem primer, dodana je samo subrutina Računanje, v kateri izračunamo vrednosti za posamezne tipke.
Preračun vrednosti za posamezno tipko poteka po sledečem principu:
- Za tipke 2, 3 in 14, 15 izračunamo vrednosti po formuli:
Tipka št. 2=Tipka 1- (Tipka1-Tipka4)/3
- Nato nam ostanejo samo še tipke 9-12 in 5-8, ki jih izračunamo po sledečih formulah:
Tipka 9 = Tipka13- (Tipka13-Tipka1)/4
- isto velja za tipke 10-12.
- Za tipke 5-8 uporabimo formulo:
Tipka5=Tipka9-(Tipka9-Tipka1)/2
Morda se boste vprašali, kako smo prišli do teh formul: enostavno smo podatke o X in Y koordinatah, ki smo jih izmerili pri postopku kalibracije v 16 točkah prenesli v Excel tabelo in tam ugotovili to značilnost folije.
Zaključek
Tako smo izračunali vse vrednosti za pritisk na touch foliji. Ob tem je potrebno opozoriti na različne touch folije! Folija, ki jo ponujamo v AX elektroniki, ima takšne lastnosti, da se vrednosti lahko izračuna s pomočjo navedenih formul. V kolikor to ni možno predlagam kalibracijo v 16 točkah. Program seveda ni idealen in zaradi nelinearnosti folije so dogaja, da določene tipke – še posebej tiste ob desnem robu, ne »primejo« in je potrebno ponovno pritisniti na njih. To se dogaja zaradi opisane nelinearnosti folije. V kolikor bi vas to motilo predlagam, da si izrišete večje tipke, recimo 8 tipk. S tem, ko so tipke večje, je lahko večje tudi območje okoli pritiska tipke, ki je razloženo nekaj vrstic višje. Upam, da vam bo program na grafičnem LCD-ju s touch folijo lepo deloval!
Program FONTI Program MALE IN VELIKE TIPKE
Za nakup tiskanega vezja ali ostalega materiala, lahko kontaktoirate uredništvo revije Svet elektronike!
Ogled celotnega članka je možna le z nakupom letnika v PDF obliki.