Also ich hab mal den Algorithmus nachgebaut (zumindest versucht).
Eigentlich müsste er so laufen, nur ich erhalte als Positionen immer 0 / 0.
Werd den Fehler natürlich weiter verfolgen.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)); }







Zitieren

Lesezeichen