【问题标题】:Changing the origin of 4-wires-touchscreen改变四线触摸屏的起源
【发布时间】:2021-06-09 10:25:04
【问题描述】:

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

现在,我想获得与我的触摸屏尺寸相匹配的值。我以前尝试过,但每次触摸触摸屏时,我的测量结果都失败了 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]);
           
  }

我的目标是将触摸屏的原点放在中间,并将每个位置的值设为厘米。 (见图二)

提前致谢!

【问题讨论】:

  • 您可以进行线性匹配(yourX = a*measuredX+b - Y 相同),但电阻式触摸屏校准有点复杂。这里有一点要阅读:ti.com/lit/an/slyt277/slyt277.pdf?ts=1623210456852
  • 谢谢,我尝试了类似的方法,它成功了。您还知道如何在 Simulink 中实现这一点吗?所以,如果我触摸屏幕,我可以看到 2D 的确切位置。

标签: arduino coordinates touchscreen


【解决方案1】:

我得到了答案,我必须在 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]);
    
    
  }
  

【讨论】:

    猜你喜欢
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多