Zuerst mal der Codeabschnitt:
Code:
unsigned char x, x_old, y, y_old, new_touch;
void glcd_touch_draw() {
uint16_t adc_x, adc_y; // garantiert immer mit den gleichen adc werten arbeiten
adc_x = glcd_touch_read_x();
adc_y = glcd_touch_read_y();
if(adc_x<13600) { /* Wenn Touchpad berührt dann */
/* x = (adc_x - adc_min_x) / ((adc_max_x-adc_min_x) / auflösung x); */
x = (adc_x - 220*16) / (((850-220)*16) / 160);
y = 80-((adc_y - 280*16) / (((770-280)*16) / 80));
if(y>15) { /* 15px Leiste oben (nicht zu bezeichnen) */
if(new_touch==1) { /* wenn stift neu aufsetzt ist alter x-wert ungültig */
glcd_plot_pixel(x,y, PIXEL_ON);
}
else { /* entprellen */
if(((x-x_old)<3) && ((x-x_old)>-3))
if(((y-y_old)<3) && ((y-y_old)>-3))
glcd_plot_pixel(x,y, PIXEL_ON);
}
}
x_old=x;
y_old=y;
glcd_touch_collision(x,y); /* Buttons abfragen */
new_touch=0;
}
else {
new_touch=1;
}
}
Durch das if(y>15) { sollte eigentlich garantiert sein, dass NIE gezeichnet wird, wenn der y-Wert kleiner als 15 ist.. dennoch werden teilweise Pixel viel weiter oben gezeichnet. Erklären kann ich mir das nicht. Vielleicht verbessert es sich, wenn ich die ADC Werte öfter einlese, aber dennoch würde ich gerne verstehen, weshalb er auf die Idee kommt plötzlich Pixel oberhalb der y=15 zu zeichnen
Edit: Wenn ich das Programm lange genug laufen lasse verschwinden teilweise sogar Pixel vom Rechteck oben (das in dem "Clr" steht)... Erklären kann ich mir das nun beim besten Willen nicht
Hier noch die plot Funktion:
Code:
void glcd_plot_pixel(unsigned int x, unsigned int y, unsigned char state) {
unsigned char pos;
if(glcd_mode==GLCD_GRAPHIC) {
glcd_moveto(x, y);
pos = x%8;
if (state == PIXEL_ON)
glcd_write(GLCD_CMD_SET_BIT, pos);
else
glcd_write(GLCD_CMD_CLEAR_BIT, pos);
}
}
Grüße
Lesezeichen