Also ich hab mal den Algorithmus nachgebaut (zumindest versucht).
Eigentlich müsste er so laufen, nur ich erhalte als Positionen immer 0 / 0.
Code:
#define Iterations 5
#define LCD_Width 128
#define LCD_Height 64
// Calibration values; set with defaults
ui16_t r0_x = 101;
ui16_t r1_x = 867;
ui16_t r2_x = 848;
ui16_t r3_x = 102;
ui16_t r0_y = 145;
ui16_t r1_y = 150;
ui16_t r2_y = 802;
ui16_t r3_y = 759;
void TPAD_GetPosPrecise(ui8_t *xp, ui8_t *yp)
{
ui8_t cycle;
ui16_t x_raw;
ui16_t y_raw;
ui32_t main_det;
double W = 0; // iteration parameter
double LV_x = 0; // solving vector X
double LV_y = 0; // solving vector Y
double D_x = 0; // det. x
double D_y = 0; // det. y
double factor_x = 0;
double factor_y = 0;
TPAD_GetPos(&xraw, &yraw);
// calculate constant values for iteration:
// (r1_x - r0_x) = D20 (Excel cell D20)
// (r1_y - r0_y) = E20
// (r3_x - r0_x) = D21
// (r3_y - r0_y) = E21
// D = D20 * E21 - E20 * D21
main_det = ((r1_x - r0_x) * (r3_y - r0_y)) - ((r1_y - r0_y) * (r3_y - r0_y));
// (r - r0) = (x_raw - r0_x) = D23
// (r - r0) = (y_raw - r0_y) = E23
// (r0-r1)-(r3-r2) = (r0_x - r1_x) - (r3_x - r2_x) = D24
// (r0-r1)-(r3-r2) = (r0_y - r1_y) - (r3_y - r2_y) = E24
// Iteration:
for (cycle = 0 ; cycle < Iterations ; cycle++)
{
LV_x = (x_raw - r0_x) - (W * ((r0_x - r1_x) - (r3_x - r2_x))); // = D31
LV_y = (y_raw - r0_y) - (W * ((r0_y - r1_y) - (r3_y - r2_y))); // = E31
D_x = (LV_x * (r3_y - r0_y)) - (LV_y * (r3_x - r0_x)); // = D33
D_y = (LV_y * (r1_x - r0_x)) - (LV_x * (r1_y - r0_y)); // = E34
factor_x = D_x / main_det; // = D36
factor_y = D_y / main_det; // = E37
W = factor_x * factor_y;
}
*xp = (factor_x * (LCD_Width - 1));
*yp = (factor_y * (LCD_Height - 1));
}
Werd den Fehler natürlich weiter verfolgen.
Lesezeichen