Moin Leute,
ich habe mir das TFT Touchpad von Adafruit gekauft
http://www.adafruit.com/products/376
ich habe die Beispielprogramme schon hochgeladen und geteste, diese
funktionieren auch soweit. Nun möchte ein Programm etwas abändern und
zwar möchte ich auf dem Display ein Rechteck erzeugen, nachdem man auf
das Rechteck gedrückt hat soll sich die Hintergrundfarbe des Displays
ändern. Auch diese kleine Herausforderung habe ich implementiert.
Leider ist mir aufgefallen, dass ich ein paar abweichungen bezüglich der
Druckfläche habe. Das heißt, wenn ich ein wenig neben dem Rechteck
drücke, ändert sich die Hintergrundfarbe trotzdem noch. Liegt dieser
Fehler in der Genauigkeit des Display oder an meinem Programm. Mein Ziel
ist es 2 Rechtecke zu erzeugen, die beim betätigen andere Verzweigungen
aufrufen...
Ist rechteck 1 gedrückt, mache fall 1
ist rechteck 2 gedrückt, mache fall 2...
Im programm, habe ich extra die switch case anwesiung genommen, damit
ich das Touchpad "entprellen" kann.
// scale from 0->1023 to tft.width: The Raw ADC value has to be converted to Pixel Co-ordinates. This is done with map function. This mapping changes for v0.9 and v1.0. The demo applications already takes care of this mapping.
43
p.x=map(p.x,TS_MINX,TS_MAXX,tft.width(),0);
44
p.y=map(p.y,TS_MINY,TS_MAXY,tft.height(),0);
45
46
staticcharColorCounter=0;
47
48
switch(TFT_State)
49
{
50
case0:
51
{
52
if(p.z>MINPRESSURE&&p.z<MAXPRESSURE)
53
TFT_State=10;
54
break;
55
}
56
57
case10:
58
{//WEnn der WIderstand im Bereich des roten Kästchen ist dann...
59
if(p.x>XMAX1&&p.x<XMAX1+BOXSIZE){TFT_State=20;}//WEnn der WIderstand im Bereich des roten Kästchen ist dann...
Zeige x und y auf dem Display an und vergleiche es mit der Position
Deiner Box. Finger sind nicht ideal und Du wirst immer mehrere Pixel
gleichzeitig drücken, die Frage ist, was die Auswertung daraus macht.
Außerdem kann der Touch leicht versetzt aufgebracht sein, d.h. Du
müsstest einen Offset bestimmen und herausrechnen. Dazu am besten einen
definierten Punkt anzeigen, mit etwas Spitzem drücken (kleine
Kontaktfläche, soll nicht die Oberfläche beschädigen) und die Position
vergleichen. Du könntest dafür auch eine Kalibrierroutine schreiben und
die Offset-Werte im EEPROM ablegen, aber das lohnt sich bei einem Stück
nicht.
Sollte es daran nicht liegen, dann kannst Du mit der x- und y-Anzeige
Deinen Code "debuggen", einfach die Switch-Cases mit den Werten von Hand
durchrechnen. Oder einen Debugger benutzen, wenn das geht.