《动手玩转Arduino》——10.3 作品35:做一个两区域触摸开关

简介:

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

10.3 作品35:做一个两区域触摸开关

在这个作品中,我们用触摸屏坐标系做出了一个开关。把屏幕垂直地分成两部分,如图10-5所示,左边的区域表示“on”,而右边的区域表示“off”。


screenshot

Arduino通过比较触摸点的坐标和屏幕两部分的边界来判断触摸屏上哪个区域被触摸了。判断出区域之后,就可以向一个数字输出发送开或关的信号了,不过这个程序只是简单地在串口监视器上显示哪个区域被触摸了,是开了还是关了。

10.3.1 程序

输入并上传下面的程序。

  // 作品35 - 做一个两区域触摸开关 

  int x,y = 0; 

  void setup() 
  { 
    Serial.begin(9600); 
    pinMode(10, OUTPUT); 
  } 

  void switchOn() 
  { 
    digitalWrite(10, HIGH); 
    Serial.print("Turned ON at X = "); 
    Serial.print(x); 
    Serial.print(" Y = "); 
    Serial.println(y); 
    delay(200); 
  } 

  void switchOff() 
  { 
    digitalWrite(10, LOW); 
    Serial.print("Turned OFF at X = "); 
    Serial.print(x); 
    Serial.print(" Y = "); 
    Serial.println(y); 
    delay(200);  
  } 

  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);
    return xr; 
  } 

  int readY()             // 返回触摸屏y轴的值
  { 
    int yr=0; 
    pinMode(A0, OUTPUT);    // A0 
    pinMode(A1, INPUT); 
    pinMode(A2, OUTPUT); 
    pinMode(A3, INPUT); 
    digitalWrite(A0, LOW);   // 设A0为GND
    digitalWrite(A2, HIGH);   // 设A2为5V
    delay(5);
    yr=analogRead(1);
    return yr;
  } 

  void loop() 
  { 
    x=readX(); 
    y=readY(); 

1 // 检查是否按下(ON) 

    if (x<=900 && x>=500) 
    { 
     switchOn(); 
    } 

2 // 检查是否按下(OFF) 
    if (x<500 && x>=100) 
    { 
     switchOff(); 
    } 
  }

10.3.2 工作原理

在void loop()里的两个if语句检查屏幕的左边或右边有没有发生触摸。如果左边被触摸了,这个触摸在1处被认为是一个“ON”;而如果右边被触摸了(按下了“OFF”),这个触摸会在2处被检测出来。

注意:

y轴上的数值被忽略了,因为触摸屏是被垂直分成左右两半的。如果水平分成上下两半,那么就需要用y轴的数值来做检测了,作品36就是这么干的。

10.3.3 测试程序

图10-6所示是串口监视器上的这个程序的输出结果。每次触摸屏幕,就显示开关的状态和触摸的坐标。


screenshot

相关文章
|
4月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
38 0
|
5月前
Axure快速入门(04) - 元件位置调整
Axure快速入门(04) - 元件位置调整
53 0
HMI-33-【运动模式】补上油量表和水温表
上一篇,以为是做了一个收尾,写了灯光控制面板和底部的信息栏,但是,有位眼见的小伙伴`江山壹角`,直接不给我面子,说我的水温表和油量表不会动。截图位置,我记仇哈。
|
11月前
|
容器
射击游戏中如何实现双摇杆控制
嗨!大家好,我是小蚂蚁。 在移动设备上玩射击游戏,双摇杆控制是一种比较好的方式,我们今天就来分享一下如何在射击游戏中实现双摇杆控制。 所谓的双摇杆控制,指的是一个摇杆控制角色的移动,一个摇杆控制角色的射击。 来到小游戏制作工具中,先导入一些素材。
124 0
|
JavaScript 前端开发
【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍
唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常! 少年不曾迷茫,展翅飞往神域,坚定初心,踏实行动。 新的一年,收下少年的祝福,一起踏上新道路。 💪(ง •_•)ง!!!
159 0
【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍
|
存储 编解码 监控
案例分享:Qt+Arm+Fpga医疗肾镜(又名内窥镜)(实时影像、冻结、拍照、白平衡、九宫格、录像、背光调整、硬件光源调整、光源手动自动调整、物理按键)
案例分享:Qt+Arm+Fpga医疗肾镜(又名内窥镜)(实时影像、冻结、拍照、白平衡、九宫格、录像、背光调整、硬件光源调整、光源手动自动调整、物理按键)
案例分享:Qt+Arm+Fpga医疗肾镜(又名内窥镜)(实时影像、冻结、拍照、白平衡、九宫格、录像、背光调整、硬件光源调整、光源手动自动调整、物理按键)
|
前端开发
巧用滤镜实现高级感拉满的文字快闪切换效果
巧用滤镜实现高级感拉满的文字快闪切换效果
197 0
巧用滤镜实现高级感拉满的文字快闪切换效果
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity通过 射线 获取 鼠标的世界坐标 和 鼠标点击的物体信息
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】☀️ | Unity通过 射线 获取 鼠标的世界坐标 和 鼠标点击的物体信息
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
LabVIEW实现PCB电路板坐标定位(实战篇—2)
LabVIEW实现PCB电路板坐标定位(实战篇—2)
LabVIEW实现PCB电路板坐标定位(实战篇—2)