《动手玩转Arduino》——10.2 作品34:触摸屏上的定位

    xiaoxiao2023-12-02  164

    本节书摘来自异步社区《动手玩转Arduino》一书中的第10章,第10.2节,作者【澳】John Boxall,译者 翁恺,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    10.2 作品34:触摸屏上的定位

    在上层的塑料膜和下层的玻璃层之间,触摸屏有两层电阻性的镀膜。一层镀膜是x轴,另一层是y轴。当电流流经每层镀膜,镀膜的阻值会由于不同地方的触摸而不同。这样,测量了每层的电流,就能得到所触摸区域的X和Y坐标。

    在这个作品中,我们要用Arduino记录屏幕上触摸的位置,然后把这种触摸转换成能够指出屏幕上的区域的整数。

    10.2.1 硬件

    需要如下的元件:

    触摸屏和小板;一个10kΩ微调电阻;一个16×2字符LCD模块;一些连接线;一块面包板;Arduino和USB线。

    按照表10-1连接触摸屏,然后按照7.1节“字符LCD模块”的描述和图7-2的样子连接LCD模块。

    10.2.2 程序

    输入并上传下面的程序。程序中重要的地方已经加上了注释。

      // 作品34 - 触摸屏上的定位   #include <LiquidCrystal.h>   LiquidCrystal lcd(4,5,6,7,8,9);   int x,y = 0;   void setup()    {      lcd.begin(16,2);     lcd.clear();   }  1 int readX()          // 返回触摸屏的x轴   {     int xr=0;     pinMode(A0, INPUT);        pinMode(A1, OUTPUT);        pinMode(A2, INPUT);      pinMode(A3, OUTPUT);        digitalWrite(A1, LOW);    // 设A1为GND      digitalWrite(A3, HIGH);   // 设A3为5V     delay(5);    xr=analogRead(0);       // 保存x轴的值     return xr;   } 2 int readY()          // 返回触摸屏的y轴   {     int yr=0;     pinMode(A0, OUTPUT);    // A0     pinMode(A1, INPUT);     // A1     pinMode(A2, OUTPUT);    // A2     pinMode(A3, INPUT);     // A3     digitalWrite(14, LOW);   // 设A0为GND      digitalWrite(16, HIGH);   // 设A2为5V     delay(5);     yr=analogRead(1);      // 保存y轴的值     return yr;   }   void loop()   {     lcd.setCursor(0,0); 3   lcd.print(" x = ");      x=readX();     lcd.print(x);     y=readY();     lcd.setCursor(0,1); 4   lcd.print(" y = ");      lcd.print(y);    delay (200);    }

    在1和2处的函数readX()和readY()读入触摸屏的电阻层的电压,用analogRead()函数读到电压,然后返回读数。程序不断地执行这两个函数来得到屏幕上被触摸区域的实时位置,然后在3和4处把这个数据显示在LCD上(每个函数里的delay(5)是给输入/输出引脚足够的时间来响应变化)。

    10.2.3 测试程序

    测试这个程序的时候,一边触摸屏幕一边看着LCD模块,观察在屏幕的不同位置触摸时的x和y的值。同时还要注意不触摸屏幕时显示的数值,如图10-3所示。

    这些值很重要,程序中要用这些值判断屏幕是否被触摸到。

    10.2.4 触摸屏上的坐标

    触摸屏幕的四角,记录下返回值,就能给屏幕定坐标,如图10-4所示。这也就是要画出每个角的坐标。一旦决定了这些值,就可以把整个触摸屏划分成较小的区域,以此作为控制用的区域了。

    建立了触摸屏的坐标系后,可以把整个屏幕分成较小的区域,用readX()和readY()函数在屏幕上定义出一些控制区域,然后就可以用if语句在某些区域被触摸的时候采取对应的动作了。作品35就是这样做的。

    相关资源:触摸屏实例
    最新回复(0)