Finalized calibration. Fixed a bug in screen module.

This commit is contained in:
t-moe
2015-06-01 23:28:31 +02:00
parent 3155f42646
commit eb573bc589
8 changed files with 92 additions and 76 deletions

View File

@@ -3,30 +3,31 @@
#include "touch.h"
#define CCENTER 20 //Pixel Distance from Sides for Calibration Cross
#define CLENGTH 10 //Length of the Calibration Cross Lines
#define CBEGIN (CCENTER-CLENGTH/2)
#define CEND (CCENTER + CLENGTH/2)
#define DWIDTH 320
#define DHEIGHT 240
extern volatile bool calibration; //from touch.c
static void enter(void* screen) {
int _x1,_y1,_x2,_y2,dx,dy;
tft_clear(BLACK);
}
tft_print_line(50,50,WHITE,BLACK,0,"Hit the markers exactly!");
static void leave(void* screen) {
}
static void update(void* screen) {
int x1,y1,x2,y2,dx,dy;
tft_print_line(50,50,WHITE,BLACK,1,"Calibration:");
tft_print_line(50,120,WHITE,BLACK,0,"Hit the markers exactly!");
//-----------------First Point--------------------
tft_draw_line(CCENTER,CBEGIN,CCENTER,CEND,WHITE); //Draw Cross
tft_draw_line(CBEGIN,CCENTER,CEND,CCENTER,WHITE); //Draw Cross
calibration=1; //TouchX + TouchY Values will not be converted to Pixels
while(calibration); //Wait on PenUp
POINT_STRUCT p1 = touch_get_last_point();
_x1=p1.x;
_y1=p1.y;
x1=p1.x;
y1=p1.y;
tft_fill_rectangle(CBEGIN,CBEGIN,CEND,CEND,BLACK); //Clear Cross
//-----------------Second Point-------------------
@@ -35,8 +36,8 @@ static void enter(void* screen) {
calibration=1;
while(calibration);
POINT_STRUCT p2 = touch_get_last_point();
_x2=p2.x;
_y2=p2.y;
x2=p2.x;
y2=p2.y;
tft_fill_rectangle(DWIDTH-CBEGIN,DHEIGHT-CBEGIN,DWIDTH-CEND,DHEIGHT-CEND,BLACK);
//-----------------Third Point--------------------
@@ -45,8 +46,8 @@ static void enter(void* screen) {
calibration=1;
while(calibration);
POINT_STRUCT p3 = touch_get_last_point();
_x1+=p3.x; //Add(!) values. We'll build the average later
_y2+=p3.y;
x1+=p3.x; //Add(!) values. We'll build the average later
y2+=p3.y;
tft_fill_rectangle(CBEGIN,DHEIGHT-CBEGIN,CEND,DHEIGHT-CEND,BLACK);
//------------------4. Point---------------------
@@ -55,23 +56,23 @@ static void enter(void* screen) {
calibration=1;
while(calibration);
POINT_STRUCT p4 = touch_get_last_point();
_x2+=p4.x;
_y1+=p4.y;
x2+=p4.x;
y1+=p4.y;
tft_fill_rectangle(DWIDTH-CBEGIN,CBEGIN,DWIDTH-CEND,CEND,BLACK);
//-------------------Calculation---------------------
_x1++; //Add 1 and divide by 2 later = +0.5 (for correct rounding)
_y1++;
_x2++;
_y2++;
_x1>>=1; //Divide by 2
_y1>>=1;
_x2>>=1;
_y2>>=1;
dx = (_x2-_x1); //Build the Difference
dy = (_y2-_y1);
x1++; //Add 1 and divide by 2 later = +0.5 (for correct rounding)
y1++;
x2++;
y2++;
x1>>=1; //Divide by 2
y1>>=1;
x2>>=1;
y2>>=1;
dx = (x2-x1); //Build the Difference
dy = (y2-y1);
touch_set_calibration_valules(_x1,dx,_y1,dy);
tft_print_line(50,50,WHITE,BLACK,0,"Calibration Done. Press anywhere");
touch_set_calibration_values(x1,dx,y1,dy);
tft_print_line(50,120,WHITE,BLACK,0,"Calibration Done. Press anywhere");
calibration=1;
while(calibration);
@@ -79,14 +80,6 @@ static void enter(void* screen) {
}
static void leave(void* screen) {
}
static void update(void* screen) {
}
static SCREEN_STRUCT screen = {
enter,