arduino用按钮控制灯光亮灭
了解按钮
要实现用按钮点灯,首先我们要先来了解一下按钮。
去淘宝搜了一圈,市面上的按钮大多都是这样子的
他们的封装(内部结构)是这样子的:
也就是说,按钮的内部结构是有两头没连接的(如上图①②和③④没连接在一起),当按钮按下,①②就会接通③④。
我用一张图来做个比喻:
没按下时
按钮两端电流互不干扰(一般是横面同一种电流)
当按钮按下时:
发光二极管
我们的灯光用的是普通的发光二极管,也就是所谓的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用按钮控制灯光亮灭相关推荐
- 一个按钮控制灯的开关
一个按钮控制灯的开关 可以通过Simulator进行模拟展示
- esp8266接入百度云,使用客户端控制灯亮灭
esp8266接入百度云 摘要:本篇文章介绍了esp8266如何接入百度云的整个流程,最终实现一个简单的小demo,通过mqtt客户端去去控制esp8266上小灯的点亮与关闭.文章包含三个部分: 一. ...
- stm32外部中断模式控制灯亮灭
文章目录 前言 一丶通过STMCube配置项目 1.引脚配置如图 2.配置EXIT 3.配置SYS 4.配置GPIO 5.代码创建出勾上这个 6.创建项目 二.通过KEil配置代码 1.打开生成的项目 ...
- 基于51单片机的智能无线LED灯控制 蓝牙手机APP控制灯亮灭亮度方案原理图设计
硬件电路的设计 (下方附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+8位LED灯电路+蓝牙模块电路+电源电路组成. 1.通过手机APP可以控制8路 ...
- 微信小程序获取Onenet温湿度数据并控制灯亮灭
其实之前就写过类似的文章,但是看过我博客的朋友就知道,我是先写微信小程序获取onenet,然后再写esp32上云到onenet.一篇是ESP32-C3通过MQTT协议把温湿度上传到OneNet平台 ...
- 博图程序需要手动同步_贴吧求助帖博图实例单按钮控制灯的程序
接上一期在贴吧看见的求助帖(上图看得见水印),因为没人回复,发帖的楼主好像删除了帖子.结果我抽时间用博图15.1,S71200做了一个,希望给需要帮助的新人能够起到作用,感觉有用的话可以关注一下我的公 ...
- c语言一个按键控制1个灯的亮灭,51 单片机:按键控制灯亮灭和闪烁
要求: 上电灯不亮,按一下按键灯亮,再按一下灯闪烁,再按一下灯闪烁更快, 再按一下灯灭.... 如此循环. 链接:http://zhidao.baidu.com/question/1639123949 ...
- 基于单片机红外遥控LED控制灯亮灭设计毕设课设资料
资料下载地址-1038(百度网盘):点击下载 #include <reg52.h> sbit LED1 = P1 ^ 0; sbit LED2 = P1 ^ 1; sbit LED3 = ...
- Arduino Uno + APDS9930 实现手势控制LED灯亮灭、调光等
目录 前言 功能介绍: 1.靠近亮灯.距离保持约10cm常亮,远离延时熄灭 2.靠近点亮/熄灭LED,延时期间操作不响应 3.挥手点亮/熄灭LED,悬停进行非无极pwm调光 接线 效果图 源码 通用部 ...
最新文章
- Tip#66:你知道吗?如何在输入属性值时自动插入双引号
- MongoDB日志切换(Rotate Log Files)指南
- 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...
- 从零开始开发JVM语言(十一)Lambda
- phpstudy(小皮面板)Deepin安装脚本
- Java 判断字符串第一位和最后一位,并截取
- LINUX操作系统手机刷机包制作、修改方法
- docker构建容器服务
- IDEA 配置Maven项目
- Docker精华问答 | Docker vs VM
- Spring Mvc Controller返回值、参数绑定、参数校验 (高级二)
- Xen和KVM的guest主机热添加硬盘
- rdkit 修改分子
- 计算机辅助审计学心得,计算机辅助审计论文范文
- JS自定义鼠标右键菜单
- 微信小程序-detail详情页数据动态展示
- python解析xml读取指定属性_python批量修改xml某些内容和属性
- 雷军:我也想做高级工程师 !
- c++整人代码,“垃圾清理程序”
- Android动态删减ListView,类似学习经历增删,钉钉物品领用