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.