#define P_TIME 100
struct TP_point
{
uint16_t x;
uint16_t y;
};
uint16_t isPress(uint8_t yp, uint8_t xm, uint8_t ym , uint8_t xp)
{
static uint32_t tm_m = 0;
if (millis() - tm_m < P_TIME) return 0;
tm_m = millis();
pinMode(xp, OUTPUT);
digitalWrite(xp, LOW);
pinMode(ym, OUTPUT);
digitalWrite(ym, HIGH);
digitalWrite(xm, LOW);
pinMode(xm, INPUT);
digitalWrite(yp, LOW);
pinMode(yp, INPUT);
uint16_t z1 = analogRead(xm);
uint16_t z2 = analogRead(yp);
return (1023 - (z2 - z1));
};
uint16_t GetX(uint8_t yp, uint8_t xm, uint8_t ym , uint8_t xp)
{
pinMode(yp, INPUT);
pinMode(ym, INPUT);
digitalWrite(yp, LOW);
digitalWrite(ym, LOW);
pinMode(xp, OUTPUT);
digitalWrite(xp, HIGH);
pinMode(xm, OUTPUT);
digitalWrite(xm, LOW);
return 1023 - analogRead(ym);
};
uint16_t GetY(uint8_t yp, uint8_t xm, uint8_t ym , uint8_t xp)
{
pinMode(xp, INPUT);
pinMode(xm, INPUT);
digitalWrite(xp, LOW);
digitalWrite(xm, LOW);
pinMode(yp, OUTPUT);
digitalWrite(yp, HIGH);
pinMode(ym, OUTPUT);
digitalWrite(ym, LOW);
return 1023 - analogRead(xm);
};
TP_point GetXY(uint8_t yp, uint8_t xm, uint8_t ym , uint8_t xp)
{
TP_point p;
p.x = GetX(yp, xm, ym, xp);
p.y = GetY(yp, xm, ym, xp);
// коэффициенты только для моего экрана!
p.y = constrain(map(p.y, 127, 903, 5, 235),0,239);
p.x = constrain(map(p.x, (237 - 0.44 * (float)p.y), 930, 5, 315),0,319);
return p;
}