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

简介:

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

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

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

10.4.1 触摸屏坐标系

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

bd3f7dcd0cbef6d86075f094e260a17a605b8b5e

这个触摸屏的坐标系分成“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; 
   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) 

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

  // 检查是否按下(OFF) 

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

  // 检查亮度 

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

####10.4.3 工作原理
和分成两区域的程序类似,这个程序在2.jpg和3.jpg处判断触摸是否发生在“ON”和“OFF”区域,以及在4.jpg处判断是否有在水平分割线之上的触摸,那是表示亮度调节的。如果在亮度区域触摸了屏幕,在1.jpg处,x轴的位置会被转换成相应的PWM值,然后用setBrightness()调节LED的亮度。
相关文章
|
8月前
|
前端开发 JavaScript
与众不同的夜间开关交互效果
与众不同的夜间开关交互效果
42 0
|
5月前
|
存储 智能硬件
使用SwiftUI搭建一个智能家居的开关灯页面,我是有多无聊~
使用SwiftUI搭建一个智能家居的开关灯页面,我是有多无聊~
27 0
|
JavaScript 前端开发
【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍
唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常! 少年不曾迷茫,展翅飞往神域,坚定初心,踏实行动。 新的一年,收下少年的祝福,一起踏上新道路。 💪(ง •_•)ง!!!
159 0
【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍
51单片机控制数字时钟的显示及修改
51单片机控制数字时钟的显示及修改
165 0
51单片机控制数字时钟的显示及修改
|
C# 内存技术
好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效按钮
原文:好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效按钮 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/46457923 我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单许多。
1832 0
|
Android开发
Android Things创客DIY第五课-硬件开发案例教程-PWM调色-触摸开关-数码管显示-OLED显示
Android Things开发,离不开硬件的DIY组合,本例来介绍一些好玩的硬件模块的使用。如果你手上有Google派发的NXP开发板,或者已有树莓派3B,那么就可以开始你的Android Things创客DIY之旅了。
1982 0