了解按钮

要实现用按钮点灯,首先我们要先来了解一下按钮。
去淘宝搜了一圈,市面上的按钮大多都是这样子的


他们的封装(内部结构)是这样子的:


也就是说,按钮的内部结构是有两头没连接的(如上图①②和③④没连接在一起),当按钮按下,①②就会接通③④。
我用一张图来做个比喻:
没按下时
按钮两端电流互不干扰(一般是横面同一种电流)

当按钮按下时:

发光二极管

我们的灯光用的是普通的发光二极管,也就是所谓的LED灯


发光二极管网上的资料很多,随便一搜一大把,在这里不做过多介绍,不懂留言,或者私信,我给你手摸手教学,嘿嘿嘿

根据上图,送大家一句口诀:
长正短负,负胖正瘦。

arduino编程和接线

我没有找到我的LED灯,只有贴片的了,所以我用了arduino UNO R3的板载LED灯(13号引脚)
如果用led灯的话,接线是这样子的

PS:(为什么上图会加了个电阻?)
Led灯的阻值会随着它两端电压的变化而改变,一般来说,如果直接将Led灯的正极接在Arduino的+5V,负极接在Arduino的GND,这个Led灯会直接烧坏。不过如果直接以Arduino的输出接口接Led灯的正极,在输出高电平点亮Led灯时倒不会烧坏,但是此时流过Led灯的电流已经达到了60mA以上,超过了Arduino输出端口的最大输出电流,长时间工作可能会损坏Arduinio板。所以接Led灯时最好要串联一个220欧姆左右的电阻,这样可以使流过Led灯的电流降到10mA左右。
LED 额定工作电压1.8V,额定工作电流10mA,由R=(5-1.8V)/10mA=20欧

LED的接线是:
短脚接GND
长脚接P13
按钮的接线是 一只脚接GND 一只脚接P6

代码:

void setup(){pinMode(6, INPUT);  //P6模式是输出digitalWrite(6,HIGH);  //P6输出高电平pinMode(13, OUTPUT);  //P13输出高电平
}
void loop(){if (digitalRead(6) == LOW)   //如果P6等于低电平(GND){digitalWrite(13,HIGH);     //十三号引脚亮灯} else {digitalWrite(13,LOW);     //十三号引脚灭灯}
}

效果如下:

arduino按钮点灯(开源)

debug–消抖

用上面的代码,效果就是按下按钮,板载LED灯和你连接十三号引脚的灯就会亮

但是这样子并不好,有时候明明没有按下,你的灯会突然亮一下,这是为什么呢?
这是因为你的按钮会抖动,会突然接触上那么0.01秒,那么你的单片机也会识别到,认为是低电平了应该亮一下灯了,我们管他叫debug,那咋办勒?

那我们让他不在0.01秒识别不就没事了?
看了很多文章,一般的识别时间是20毫秒一次,也就是说,我识别你是低电平,好,那我等20毫秒,我怕你是突然抖动,耍我玩的,20毫秒后,诶,你还真是低电平,那我才给你开灯。

实现代码如下:

void setup(){pinMode(6, INPUT);digitalWrite(6,HIGH);pinMode(13, OUTPUT);
}
void loop(){if (digitalRead(6) == LOW) {delay(20);                          //20ms消抖if (digitalRead(6) == LOW) {digitalWrite(13,HIGH);}}if (digitalRead(6) == HIGH) {delay(20);                                 //消抖if (digitalRead(6) == HIGH) {digitalWrite(13,LOW);}}
}

这时候又有人来询问(刁难)我了

哎呀,你这个怎么要一直按着才能亮灯呀,好麻烦呀,能不能按一下就亮,按一下就灭呀,你该不会不行吧?????????????????????????????????????????????????????????????????????????????????????????????????

我掉了整整两根头发,日思夜想,想了整整10秒钟,敲动键盘,啪啪啪,几秒钟就弄好了,代码如下:

volatile boolean LED;        //做个布尔类型变量 LED   布尔类型只有0和1  也就是真和假void setup(){LED = 0;pinMode(6, INPUT);pinMode(13, OUTPUT);
}void loop(){if (digitalRead(6) == LOW) {delay(50);                 //我这里抖的厉害(本人老帕金森)所以抖动延时到了50msif (digitalRead(6) == LOW) {LED = !LED;                   //0不等于0=1    1不等于1=0digitalWrite(13,LED);          //LED=0或者1  就亮灭while(digitalRead(6) == LOW)//如果6号引脚一直是低电平,则卡在这里不出去,这样子直到松开才能继续运气其他函数}}
}

这个时候又刁民,啊不,可爱的网友出来说了:“怎么那么复杂呀?有没有简单一点的呀?你该不会不行吧?巴拉巴拉吧啦吧啦…”

void setup(){pinMode(6, INPUT);pinMode(13, OUTPUT);
}void loop(){if (digitalRead(6) == LOW) {delay(200);     //帕金森  懂得都懂if (digitalRead(6) == LOW)   //按够0.2秒后{digitalWrite(13,(!digitalRead(13)));   //13号引脚不等于13号引脚    亮不等于亮 = 灭  灭不等于灭  = 亮while(digitalRead(6) == LOW)  //松开跳出死循环{}}}}

好了,本章完事,本人去护发去了

arduino用按钮控制灯光亮灭相关推荐

  1. 一个按钮控制灯的开关

    一个按钮控制灯的开关 可以通过Simulator进行模拟展示

  2. esp8266接入百度云,使用客户端控制灯亮灭

    esp8266接入百度云 摘要:本篇文章介绍了esp8266如何接入百度云的整个流程,最终实现一个简单的小demo,通过mqtt客户端去去控制esp8266上小灯的点亮与关闭.文章包含三个部分: 一. ...

  3. stm32外部中断模式控制灯亮灭

    文章目录 前言 一丶通过STMCube配置项目 1.引脚配置如图 2.配置EXIT 3.配置SYS 4.配置GPIO 5.代码创建出勾上这个 6.创建项目 二.通过KEil配置代码 1.打开生成的项目 ...

  4. 基于51单片机的智能无线LED灯控制 蓝牙手机APP控制灯亮灭亮度方案原理图设计

    硬件电路的设计 (下方附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+8位LED灯电路+蓝牙模块电路+电源电路组成. 1.通过手机APP可以控制8路 ...

  5. 微信小程序获取Onenet温湿度数据并控制灯亮灭

    ​ 其实之前就写过类似的文章,但是看过我博客的朋友就知道,我是先写微信小程序获取onenet,然后再写esp32上云到onenet.一篇是ESP32-C3通过MQTT协议把温湿度上传到OneNet平台 ...

  6. 博图程序需要手动同步_贴吧求助帖博图实例单按钮控制灯的程序

    接上一期在贴吧看见的求助帖(上图看得见水印),因为没人回复,发帖的楼主好像删除了帖子.结果我抽时间用博图15.1,S71200做了一个,希望给需要帮助的新人能够起到作用,感觉有用的话可以关注一下我的公 ...

  7. c语言一个按键控制1个灯的亮灭,51 单片机:按键控制灯亮灭和闪烁

    要求: 上电灯不亮,按一下按键灯亮,再按一下灯闪烁,再按一下灯闪烁更快, 再按一下灯灭.... 如此循环. 链接:http://zhidao.baidu.com/question/1639123949 ...

  8. 基于单片机红外遥控LED控制灯亮灭设计毕设课设资料

    资料下载地址-1038(百度网盘):点击下载 #include <reg52.h> sbit LED1 = P1 ^ 0; sbit LED2 = P1 ^ 1; sbit LED3 = ...

  9. Arduino Uno + APDS9930 实现手势控制LED灯亮灭、调光等

    目录 前言 功能介绍: 1.靠近亮灯.距离保持约10cm常亮,远离延时熄灭 2.靠近点亮/熄灭LED,延时期间操作不响应 3.挥手点亮/熄灭LED,悬停进行非无极pwm调光 接线 效果图 源码 通用部 ...

最新文章

  1. Tip#66:你知道吗?如何在输入属性值时自动插入双引号
  2. MongoDB日志切换(Rotate Log Files)指南
  3. 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...
  4. 从零开始开发JVM语言(十一)Lambda
  5. phpstudy(小皮面板)Deepin安装脚本
  6. Java 判断字符串第一位和最后一位,并截取
  7. LINUX操作系统手机刷机包制作、修改方法
  8. docker构建容器服务
  9. IDEA 配置Maven项目
  10. Docker精华问答 | Docker vs VM
  11. Spring Mvc Controller返回值、参数绑定、参数校验 (高级二)
  12. Xen和KVM的guest主机热添加硬盘
  13. rdkit 修改分子
  14. 计算机辅助审计学心得,计算机辅助审计论文范文
  15. JS自定义鼠标右键菜单
  16. 微信小程序-detail详情页数据动态展示
  17. python解析xml读取指定属性_python批量修改xml某些内容和属性
  18. 雷军:我也想做高级工程师 !
  19. c++整人代码,“垃圾清理程序”
  20. Android动态删减ListView,类似学习经历增删,钉钉物品领用

热门文章

  1. 国内六种车牌颜色代表的意义
  2. Python学习之路 day1_Python基础1
  3. 7 金属和半导体接触
  4. 计算机组成原理 复习资料
  5. C语言为什么经久不衰?最全入门笔记
  6. 人间地狱服务器一直显示有人,人间地狱常见问题及解决方法_Hell Let Loose常见问题QA_游戏堡...
  7. mplayer的安装
  8. Dependencies
  9. MAC捕获及协议分析 实验报告
  10. ai切换rgb模式_当AI频繁切换色彩预览模式时 颜色会越变越深 求解?