Krmiljenje na dotik občutljive folije
Bascom se je spet pokazal kot odlično orodje pri tej nalogi. Vse opravimo v subrutini Readtouch:
Readtouch: 'beri touch
Config Porta.3 = Output 'pin1 (Y1)
Config Porta.1 = Output ' PIN3 (Y2)
Set Porta.1 'PIN2 (X1)
Reset Porta.3 'PIN4 (X2)
Config Pina.2 = Input 'postavi kot vhod
Config Pina.0 = Input
Waitms 20 'pocakaj, da se port stabilizira
Y = Getadc(0) 'preberi vrednost A/D
Y = 1024 - Y 'jo invertiraj
Config Porta.2 = Output 'ponovi isto za X koordinato
Config Porta.0 = Output
Reset Porta.0
Set Porta.2
Config Pina.1 = Input
Config Pina.3 = Input
Waitms 20
X = Getadc(3)
X = 1024 - X
Return
V kratki subrutini vidimo, da za vsako os (x oziroma y) posebej postavimo logično stanje na priključke folije, nato pa beremo izhodno napetost, ki jo dobimo iz A/D pretvornika. Izhodi so pač neke številke, ki nam enoznačno pomenijo točno določen položaj na foliji. Pri tej foliji velja opozoriti, da najboljše dela, če na njo pritiskamo s trdim predmetom, kot je na primer plastična (ne ostra!) paličica oziroma kakšnim drugim neostrim predmetom, ki ne poškoduje folije. Seveda lahko po foliji pritiskamo tudi s prsti, vendar boste opazili, da pritisk s
prstom ni dovolj natančen tako glede pritiska na folijo kot tudi pritiska na točno določeno mesto – še zlasti, če imate velike prste. Za določanje koordinat pritiska sem si naredil preprost program, s katerim sem na displej narisal koordinatno mrežo in izpisoval izmerjeno število mesta na foliji, kjer sem pritisnil. S pomočjo tega števila lahko s programom določamo naslednje korake. Za ta namen smo uporabili subrutino Whichkey, kjer določimo vrstico in stolpec v navidezni mreži na foliji:
Whichkey: 'sub, kjer ugotovimo, kje je bil pritisnjen touchscreen
Select Case X ' razlicne vrednosti X
Case 300 To 480 : Col = 10 '
'Case 341 To 486 : Col = 20 '
'Case 487 To 635 : Col = 30
'Case 636 To 774 : Col = 40
Case Else
Col = 0 'ce ni nic pritisnjeno
End Select ' vrednosti za Y koordinato
Select Case Y 'razlicne vrednosti Y
Case 200 To 250 : Row = 1
Case 260 To 290 : Row = 2
Case 300 To 330 : Row = 3 'ce ni nic pritisnjeno
Case Else
Row = 0
End Select
Key = Col + Row 'sestejemo, da dobimo vrednost
If Key > 0 Then 'Touchscreen Je Pritisnjen
Keyarray(keylus) = Key 'ce zelimo debounce
' Incr Keylus
' If Keylus > 3 Then Keylus = 1
' If Keyarray(1) = Keyarray(2) Then
' If Keyarray(2) = Keyarray(3) Then '3x preberemo
'Sound Speaker , 1 , 65000 'zapiskaj
Keypressed = Key
'Timecount = 0
' End If
' End If
End If
Return
Deli subrutine, ki so komentirani, so namenjeni ugotavljanju debounce efekta. Če želite, ga uporabite. Jaz ga pri testiranju nisem uporabil. V subrutini Whichkey je zanimiva uporaba ukaza Select case, kjer se vrednosti Case gibljejo v določenem razponu. To še kako pride prav pri foliji, saj nikoli ne pritisnemo na isto mesto, pač pa pritiskamo v nekem širšem območju.
Zaključek
Grafični LCD displej in folija, občutljiva na dotik, nista več nedosegljiva, pravzaprav ravno nasprotno: lepo in preprosto je delati z njima. Seveda je potrebno veliko dela, da nam bo naša aplikacija zaživela na polno, kar pomeni veliko narisanih predlog, ki jih izrisujemo na LCD-ju in jih v kombinaciji s folijo občutljivo na dotik ustrezno prikazujemo. Verjamem, da bo grafični LCD našel prostor v vaših naslednjih napravah.