《动手玩转Arduino》——10.4 作品36:做一个三区域触摸开关-阿里云开发者社区

开发者社区> 异步社区> 正文

《动手玩转Arduino》——10.4 作品36:做一个三区域触摸开关

简介:
+关注继续查看

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

10.4 作品36:做一个三区域触摸开关

在这个作品中,我们要做一个三区域的触摸开关,可以控制数字引脚3上的一个LED,让这个LED点亮、熄灭,还可以通过PWM调节它的亮度(第3章的知识)。

10.4.1 触摸屏坐标系

触摸屏的坐标系设计如图10-7所示。


screenshot

这个触摸屏的坐标系分成“OFF(关)”、“ON(开)”和“brightness(亮度)”控制区域,程序测量触摸屏返回的数值来判断哪个部分被按下了,然后做相应的动作。

10.4.2 程序

输入并上传下面的程序。

  // 作品36 - 做一个三区域触摸开关 

  int x,y = 0; 

  void setup() 
  { 
    pinMode(3, OUTPUT); 
  } 

  void switchOn() 
  { 
   digitalWrite(3, HIGH); 
    delay(200); 
  } 

  void switchOff() 
  { 
    digitalWrite(3, LOW); 
    delay(200);  
  } 

  void setBrightness() 
  { 
    int xx, bright; 
    float br; 
    xx=x-100; 
1   br=(800-xx)/255; 
    bright=int(br); 
    analogWrite(3, bright); 
  } 

  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);     // A1 
    pinMode(A2, OUTPUT);    // A2 
    pinMode(A3, INPUT);     // A3 
    digitalWrite(A0, LOW);   // 设A0为GND  
    digitalWrite(A2, HIGH);   // 设A2为5V 
    delay(5); 
    yr=analogRead(1); 
    return yr; 
  } 

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

  // 检查是否按下(ON) 

2   if (x<=500 && x>=100 && y>= 150 && y<375) 
    { 
     switchOn(); 
   } 

  // 检查是否按下(OFF) 

3   if (x>500 && x<=900 && y>= 150 && y<375) 
    { 
     switchOff(); 
    } 

  // 检查亮度 

4   if (y>=375 && y<=900) 
    { 
     setBrightness(); 
    } 
  }

10.4.3 工作原理

和分成两区域的程序类似,这个程序在2和3处判断触摸是否发生在“ON”和“OFF”区域,以及在4处判断是否有在水平分割线之上的触摸,那是表示亮度调节的。如果在亮度区域触摸了屏幕,在1处,x轴的位置会被转换成相应的PWM值,然后用setBrightness()调节LED的亮度。

我们可以使用这些基础函数,用这个简单廉价的触摸屏做出任意数量的开关或滑动控制。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云加速器联合本应科技重磅发布 《2020年芯片产业图谱及区域发展白皮书》
近日,由阿里云加速器、北京本应科技有限公司联合编制的《2020年芯片产业图谱及区域发展白皮书》(以下简称《白皮书》)在深发布。 《白皮书》深入研究芯片行业国内外现状、国家及地方产业政策、产业链图谱及竞争格局、各区域产业发展,同时结合发达国家产业发展路径,为芯片产业提出五条发展建议。在此基础上,通过梳理行业新技术,洞察产业发展趋势。 最后,回顾2020全年行业内十大热点新闻事件。 同时,芯片细分领域的TOP50/20企业榜单及活跃投资机构TOP20榜单正式发布。
298 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2841 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4479 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9424 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
443 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3829 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
11939
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载