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.
1 | #define XMAX1 40
|
2 | #define XMAX2 220
|
3 |
|
4 | #define YMAX1 80
|
5 | #define YMAX2 80
|
6 |
|
7 |
|
8 |
|
9 | void setup(void) {
|
10 | Serial.begin(9600);
|
11 | Serial.println(F("TFT LCD test"));
|
12 |
|
13 | tft.reset();
|
14 |
|
15 | #ifdef USE_ADAFRUIT_SHIELD_PINOUT
|
16 | Serial.println(F("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
|
17 | #else
|
18 | Serial.println(F("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
|
19 | #endif
|
20 |
|
21 | tft.reset();
|
22 |
|
23 | uint16_t identifier = tft.readID();
|
24 |
|
25 |
|
26 | tft.begin(identifier);
|
27 | tft.setRotation(1);
|
28 | testText();
|
29 |
|
30 | //Programmcode wir nur einmal ausgeführt
|
31 | }
|
32 |
|
33 | void loop(void)
|
34 | {
|
35 | static unsigned char TFT_State=0;
|
36 |
|
37 | digitalWrite(13, HIGH);
|
38 | Point p = ts.getPoint(); //Widerstandswert lesen
|
39 | digitalWrite(13, LOW);
|
40 | pinMode(XM, OUTPUT);
|
41 | pinMode(YP, OUTPUT);
|
42 | // 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 | static char ColorCounter=0;
|
47 |
|
48 | switch (TFT_State)
|
49 | {
|
50 | case 0:
|
51 | {
|
52 | if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
|
53 | TFT_State=10;
|
54 | break;
|
55 | }
|
56 |
|
57 | case 10:
|
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...
|
60 | break;
|
61 | }
|
62 |
|
63 | case 20:
|
64 | { //Warte bis losgelassen wurde
|
65 | if (!(p.y > YMAX1 && p.y <YMAX1+BOXSIZE && p.x >XMAX1 && p.x<XMAX1+BOXSIZE)) { TFT_State=30; ColorCounter++;}
|
66 | break;
|
67 | }
|
68 | case 30: //Programmcode Hier
|
69 | {
|
70 | Serial.println(("Color: ")); Serial.println((int)(ColorCounter));
|
71 |
|
72 | if(ColorCounter==1)
|
73 | tft.fillScreen(MAGENTA);
|
74 | else if(ColorCounter==2)
|
75 | tft.fillScreen(WHITE);
|
76 | else if(ColorCounter==3)
|
77 | tft.fillScreen(BLACK);
|
78 | else if(ColorCounter==4)
|
79 | tft.fillScreen(GREEN);
|
80 | else if(ColorCounter==5)
|
81 | {
|
82 | tft.fillScreen(CYAN);
|
83 | ColorCounter=0;
|
84 | }
|
85 | testText();
|
86 | TFT_State=0;
|
87 |
|
88 | break;
|
89 |
|
90 | }
|
91 | }
|
92 | }
|
93 |
|
94 | unsigned long testText() {
|
95 |
|
96 |
|
97 | tft.fillRect(XMAX1, YMAX1, BOXSIZE, BOXSIZE, BLUE); //querformat x,y
|
98 | tft.fillRect(XMAX2, YMAX2, BOXSIZE, BOXSIZE, RED); //querformat x,y
|
99 |
|
100 | unsigned long start = micros();
|
101 | tft.setCursor(0, 0);
|
102 |
|
103 | return micros() - start;
|
104 | }
|