Hallo; ich suche Anwender welche zur Programmierung von STM32 Microcontrollern CooCox IDE und Waveshare Boards verwenden. Ich habe ein Open 407Z Board und habe mir das mitgelieferte Touch Beispiel angesehen, auf der CD zu finden unter: "CD":\data\program\Open407Z\TouchPanel\User hier nochmal die Main routine int main(void) { TP_Init(); LCD_Initializtion(); LCD_Clear(Black); TouchPanel_Calibrate(); /* Infinite loop */ while (1) { getDisplayPoint(&display, Read_Ads7846(), &matrix ); TP_DrawPoint(display.x,display.y); } } Ich habe die Routine "getdisplaypoint" in meinem eigenen Programm verwendet. Nach Erkennung des Touchevents werden die Koordinaten auf dem Display ausgegeben. Leider scheint es so zu sein, das oft für die Y Koordinate der Wert 0 ermittelt wird. Ich muß oft mehrfach auf die betreffende Stelle drücken damit für Y ein "richtiger Wert" ermittelt wird. Das Display gehöhte zu Lieferumfang von Waveshare und ist das Modell HY32C Welcher Anwender von STM32 Waveshare Boards kann mir hier Tips geben wie man die Touchpunkterkennung verbessern kann. Gruß Marc
Hallo Marc
Ich habe gerade eben ein WaveShare Open407V-D mit einem STM32F4DISCOVERY
bekommen. Auf der CD befinden sich auch ausführbare Beispiele
(D:\data\program\Open407V-D) wie "LCD" oder "TouchPanel", sogar mit
"Keil MDK-ARM Projekt-Datei". Man muss gar nicht denken sondern nur
kompilieren und flashen.
Was ich feststellen musste, ist das gleiche Verhalten wie du es
beschrieben hast: die meisten Koordinaten sind X=153 und Y=0, obwohl auf
dem LCD beim loslassen des Stiftes/der Hand die richtigen Koordinaten
stehen (also die vorletzten Werte)
Ich konnte den Fehler in der Funktion "Coordinate *Read_Ads7846(void)"
lokalisieren (Rückgabewerte ist meist X=1768 und Y=8192. Kann bei jedem
anders sein [1]). Ich habe (noch) keine Ahnung, warum gerade diese
Werte. Der "Treiber" ist auch anderswo benutzt, nicht nur für die
Waveshare Boards [2]. Ev. fragt der "Treiber" zu aggresiv die Position
ab, was dem Touchscreen Controller [3] nicht gefällt und diese
statischen Werte zurückgibt.
In meinem Beispiel habe ich diese zwei Werte ausgeschlossen:
int main(void)
{
char temp[30]= {0};
Coordinate user = { 0, 0 };
Coordinate *xy;
Coordinate xyPrev = { 0, 0 };
TP_Init();
LCD_Initializtion();
LCD_Clear(Black);
TouchPanel_Calibrate();
/* Infinite loop */
while (1) {
xy = Read_Ads7846();
if (xy->x != 1768 && xy->y != 8192) {
getDisplayPoint(&display, xy, &matrix );
TP_DrawPoint(display.x,display.y);
if(user.x != display.x || user.y != display.y) {
sprintf(temp,"User X:%5u,Y:%5u",user.x,user.y);
GUI_Text(10,10,(uint8_t*)temp,Red,Black);
sprintf(temp,"Prev X:%5u,Y:%5u",xyPrev.x,xyPrev.y);
GUI_Text(10,25,(uint8_t*)temp,Green,Black);
sprintf(temp,"Current X:%5u,Y:%5u",xy->x,xy->y);
GUI_Text(10,40,(uint8_t*)temp,Blue,Black);
user.x = display.x;
user.y = display.y;
xyPrev.x = xy->x;
xyPrev.y = xy->y;
}
}
}
}
Ist aber nicht die feine Art... werde mich mal tiefer hineinlesen!
[1]
http://www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens
[2]
http://mbed.org/users/frankvnk/code/Mini-DK/file/6816fa47b39e/TouchADS7843/Touch.cpp
[3]
http://www.ti.com/lit/ds/symlink/ads7846.pdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.