4 vezetékes rezisztív érintőképernyő olvasása

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Kicsit sok lesz az a 1kHz.

Valami nem gömbölyű ott.

Haladj a többi részével a progidnak. Egyelőre csak a nyers adatokkal foglalkozz. Ma-holnap megírom neked a szűrő rutint.
Ok?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Közben én próbáltam 1 ilyen rutint.
Csak a változásra reagál, tehát ha nincsen változás megy tovább.
Nem tölti feleslegesen itt a drága időt.
Van benne Késleltetés, (ami most a Printek miatt kicsi) tehát a változásra sem azonnal cselekszik.
Megvárja, hogy beálljon a rendszer.
Igy talán nem lesz Prel és a karakterismétlések is ki vannak szűrve.
Ami lényeges rövid az egész!

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

Do

      Ddrf.touchp_yp = 0                                    ' Sets port Touchp_y+ as input
      Ddrf.touchp_ym = 0                                    ' Sets port Touchp_y- as input  because we need it now as ad input
      Ddrf.touchp_xp = 1                                    ' Makes port Touchp_x+ output
      Ddrf.touchp_xm = 1                                    ' Makes port Touchp_x- output
      Set Portf.touchp_xp                                   ' Sets port Touchp_x+ High
      Reset Portf.touchp_xm                                 ' Sets port Touchp_x- Low

      Waitms 20                                             ' Wait until the port is stable
      Touch_yp = Getadc(touchp_yp)                          ' Read the ad value for the y
      Touch_yp = 1024 - Touch_yp                            ' Invert the reading Y

      Ddrf.touchp_xp = 0                                    ' Sets port Touchp_x+ as input
      Ddrf.touchp_xm = 0                                    ' Sets port Touchp_x- as input  because we need it now as ad input
      Ddrf.touchp_yp = 1                                    ' Makes port Touchp_y+ output
      Ddrf.touchp_ym = 1                                    ' Makes port Touchp_y- output
      Reset Portf.touchp_ym                                 ' Sets port Touchp_y- Low
      Set Portf.touchp_yp                                   ' Sets port Touchp_y+ High
      Print "MY:  " ; Touch_yp ;
'      Waitms 20
      Touch_xp = Getadc(touchp_xp)                          ' Read the ad value for the x
      Touch_xp = 1024 - Touch_xp                            ' Invert the reading X
      Print "     MX: " ; Touch_xp
      If Oldtouch_yp <> Touch_yp Or Oldtouch_xp <> Touch_xp Then       'Csak ha valamelyik érték megvátozott
          Incr Vn                                           'Változás számláló növelése
          If Vn > 4 Then                                    'Várunk több változó értéket
             Vn = 0                                         'Változás számláló törlése
             Oldtouch_yp = Touch_yp           'Új értékek tárolása
             Oldtouch_xp = Touch_xp
             Touch15x8                                      'Oszlopokra és sorokra bontás
             If Oldtouchy_row <> Touchy_row Or Oldtouchx_col <> Touchx_col Then       'Csak ha valamelyik érték megvátozott
                Oldtouchy_row = Touchy_row                  'Új értékek tárolása
                Oldtouchx_col = Touchx_col
                Print "SOR! (Y): " ; Touchy_row ; "    OSZLOP (X): " ; Touchx_col

             End If
          End If
      End If


   Print
   Waitms 100
Loop
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

És ilyen számokat dobbál:

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

MY:  1     MX: 1

MY:  1     MX: 2

MY:  1     MX: 1

MY:  480     MX: 594
SOR! (Y): 4    OSZLOP (X): 10

MY:  482     MX: 595

MY:  484     MX: 596

MY:  488     MX: 601

MY:  496     MX: 607

MY:  2     MX: 2
SOR! (Y): 0    OSZLOP (X): 0

MY:  2     MX: 2

MY:  1     MX: 1

MY:  2     MX: 2

MY:  476     MX: 497

MY:  484     MX: 507

MY:  490     MX: 514

MY:  496     MX: 527
SOR! (Y): 5    OSZLOP (X): 9

MY:  499     MX: 535

MY:  500     MX: 540

MY:  502     MX: 543

MY:  503     MX: 546

MY:  503     MX: 547

MY:  504     MX: 549

MY:  505     MX: 552

MY:  507     MX: 554

MY:  3     MX: 1

MY:  3     MX: 2
SOR! (Y): 0    OSZLOP (X): 0

MY:  2     MX: 2

MY:  2     MX: 1

MY:  463     MX: 344

MY:  465     MX: 351

MY:  466     MX: 356
SOR! (Y): 4    OSZLOP (X): 5

MY:  467     MX: 360

Látszik a késleltetett reagálás.
Tesztelem éles környezetben.

8)
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Ez is egy jó megoldás, na de nem futamodunk meg!:)
Megzabolázzuk azt a szűrőt rendesen!:)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ennyivel elintéztem a zajszűrést:

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

 Sub Readtouch()
      Ddrf.touchp_yp = 0                                    ' Sets port Touchp_y+ as input
      Ddrf.touchp_ym = 0                                    ' Sets port Touchp_y- as input  because we need it now as ad input
      Ddrf.touchp_xp = 1                                    ' Makes port Touchp_x+ output
      Ddrf.touchp_xm = 1                                    ' Makes port Touchp_x- output
      Set Portf.touchp_xp                                   ' Sets port Touchp_x+ High
      Reset Portf.touchp_xm                                 ' Sets port Touchp_x- Low

      Waitms 20                                             ' Wait until the port is stable
      Touch_yp = Getadc(touchp_yp)                          ' Read the ad value for the y

      Ddrf.touchp_xp = 0                                    ' Sets port Touchp_x+ as input
      Ddrf.touchp_xm = 0                                    ' Sets port Touchp_x- as input  because we need it now as ad input
      Ddrf.touchp_yp = 1                                    ' Makes port Touchp_y+ output
      Ddrf.touchp_ym = 1                                    ' Makes port Touchp_y- output
      Reset Portf.touchp_ym                                 ' Sets port Touchp_y- Low
      Set Portf.touchp_yp                                   ' Sets port Touchp_y+ High
'      Print "MY:  " ; Touch_yp ;
      Touch_yp = 1024 - Touch_yp                            ' Invert the reading Y

      Select Case Touch_yp                                  'Kiszámolja a változás külömbségét
          Case Is > Oldtouch_yp :
                  Iyw = Touch_yp - Oldtouch_yp

          Case Is < Oldtouch_yp :
                  Iyw = Oldtouch_yp - Touch_yp
'          Case Else Iyw = 0
      End Select
      Waitms 15
      Touch_xp = Getadc(touchp_xp)                          ' Read the ad value for the x
      Touch_xp = 1024 - Touch_xp                            ' Invert the reading X
'      Print "     MX: " ; Touch_xp
' +-10 eltérések kiszürése    ADC Zaj szürés

      Select Case Touch_xp
          Case Is > Oldtouch_xp :
                  Ixw = Touch_xp - Oldtouch_xp

          Case Is < Oldtouch_xp :
                  Ixw = Oldtouch_xp - Touch_xp
'          Case Else Ixw = 0
      End Select

      If Iyw > 10 Or Ixw > 10 Then                          'Csak ha változás nagyobb mint +,- 10
          Iyw = 0
          Ixw = 0

Beolvasás után megnézzük az eltérést +- és ha 10-nél kisebb az a zaj!
:lol:

Útánna következik a szöveg szerkesztő rész, az is szép feladat.

8)
Válasz küldése