我可以读取我的四线制触摸屏的坐标。但是我在每个角落都得到了这样的值(见图I)。

现在,我希望获得与我的触摸屏大小匹配的值。我以前试过,但每次我触摸触摸屏时,我的测量都失败了1厘米。
我的代码如下:
#define Yin A0
#define Yout A1
#define Xin A2
#define Xout A3
int values[2];
void setup()
{
pinMode(Xin, INPUT);
pinMode(Yin, INPUT);
pinMode(Xout, INPUT);
pinMode(Yout, INPUT);
Serial.begin(9600);
}
void loop()
{
pinMode(Yin, OUTPUT);
pinMode(Yout, OUTPUT);
digitalWrite(Yin, LOW);
digitalWrite(Yout, HIGH);
delay(5); // Pause to allow lines to power up
// Read and store X
values[0] = analogRead(Xin);
// Reset Y
digitalWrite(Yout, LOW);
delay(5); // Pause to allow lines to power down
pinMode(Yin, INPUT);
pinMode(Yout, INPUT);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Read Y
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Set X to a gradient
pinMode(Xin, OUTPUT);
pinMode(Xout, OUTPUT);
digitalWrite(Xin, LOW);
digitalWrite(Xout, HIGH);
delay(5); // Pause to allow lines to power up
// Read and store Y
values[1] = analogRead(Yin);
// Reset X
digitalWrite(Xout, LOW);
delay(5); // Pause to allow lines to power down
pinMode(Xin, INPUT);
pinMode(Xout, INPUT);
delay(250);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Output our values
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Serial.print(values[0]);
Serial.print("\t");
Serial.println(values[1]);
}我的目标是将触摸屏的原点放在中间,并以厘米为单位获取每个位置的值。(见图二。)

提前感谢!
发布于 2021-06-10 19:02:31
我得到了答案,我必须在X和Y的输出中输入两行额外的代码。
看这里:
#define Yin A0
#define Yout A1
#define Xin A2
#define Xout A3
double korrX = 1.2;
double korrY = 1.1;
double values[2];
void setup()
{
pinMode(Xin, INPUT);
pinMode(Yin, INPUT);
pinMode(Xout, INPUT);
pinMode(Yout, INPUT);
Serial.begin(9600);
}
void loop()
{
pinMode(Yin, OUTPUT);
pinMode(Yout, OUTPUT);
digitalWrite(Yin, LOW);
digitalWrite(Yout, HIGH);
delay(5); // Pause to allow lines to power up
// Read and store X
values[0] = analogRead(Xin);
values[0] = values[0] -507;
values[0] = (11.4*values[0]/507)*korrX;
// Reset Y
digitalWrite(Yout, LOW);
delay(5); // Pause to allow lines to power down
pinMode(Yin, INPUT);
pinMode(Yout, INPUT);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Read Y
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Set X to a gradient
pinMode(Xin, OUTPUT);
pinMode(Xout, OUTPUT);
digitalWrite(Xin, LOW);
digitalWrite(Xout, HIGH);
delay(5); // Pause to allow lines to power up
// Read and store Y
values[1] = analogRead(Yin);
values[1] = values[1] -501;
values[1] = (15.2*values[1]/501)*korrY;
// Reset X
digitalWrite(Xout, LOW);
delay(5); // Pause to allow lines to power down
pinMode(Xin, INPUT);
pinMode(Xout, INPUT);
delay(250);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Output our values
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Serial.print(values[0]);
Serial.print("\t");
Serial.println(values[1]);
}
https://stackoverflow.com/questions/67902258
复制相似问题