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

本节书摘来异步社区《动手玩转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(); 
  } 

 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; 
  } 

 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); 
   lcd.print(" x = "); 
    x=readX(); 
    lcd.print(x); 
    y=readY(); 
    lcd.setCursor(0,1); 
   lcd.print(" y = "); 
    lcd.print(y); 
   delay (200);  
  }```
在1.jpg和2.jpg处的函数readX()和readY()读入触摸屏的电阻层的电压,用analogRead()函数读到电压,然后返回读数。程序不断地执行这两个函数来得到屏幕上被触摸区域的实时位置,然后在3.jpg和4.jpg处把这个数据显示在LCD上(每个函数里的delay(5)是给输入/输出引脚足够的时间来响应变化)。

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

<div style="text-align: center"><img src="https://yqfile.alicdn.com/b7d09e30e0c554e6b0e237906aebe3d8ab18677e.png" width="" height="">
</div>

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

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

<div style="text-align: center"><img src="https://yqfile.alicdn.com/d65df4e636add10cddbce7cc6efa6607ebb10ea3.png" width="" height="">
</div>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值