Arduino教程中级 项目三 Mini台灯

项目三 Mini台灯
本系列教程配套硬件套件:新版Arduino中级套件
上一课:项目二 感应灯
台灯,是我们再常见不过的东西。“啪”一下开,“啪”一下关。Mini台灯的功能就和台灯类似,按钮就像是LED的开关,每按一下,就会切换LED的状态。做完之后再给小灯来个个壳儿,一定很Q。

所需元件
1×数字食人鱼红色LED发光模块

image001.jpg (18.79 KB, 下载次数: 8)

下载附件

保存到相册

2015-9-18 14:10 上传

   1× 数字大按钮模块

image002.jpg (18.67 KB, 下载次数: 8)

下载附件

保存到相册

2015-9-18 14:10 上传

硬件连接
数字大按钮 → 数字2数字食人鱼红色LED发光模块 → 数字13

image003.jpg (79.38 KB, 下载次数: 8)

下载附件

保存到相册

2015-9-18 14:10 上传

输入代码
样例代码3-1: //项目三 —— 小台灯int buttonPin = 2; //按钮连接到数字2int ledPin = 13; //LED连接到数字13 int ledState = HIGH; // ledState记录LED状态int buttonState; // buttonState记录按键状态int lastButtonState = LOW; // lastbuttonState记录按键前一个状态 long lastDebounceTime = 0; long debounceDelay = 50; //去除抖动时间 void setup() {pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, ledState);} void loop() { //reading用来存储buttonPin的数据int reading = digitalRead(buttonPin);// 一旦检测到数据发生变化,记录当前时间if (reading != lastButtonState) { lastDebounceTime= millis();} // 等待50ms,再进行一次判断,是否和当前button状态相同// 如果和当前状态不相同,改变button状态// 同时,如果button状态为高(也就是被按下),那么就改变led的状态if ((millis() - lastDebounceTime) >debounceDelay) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { ledState= !ledState; } }}digitalWrite(ledPin, ledState); // 改变button前一个状态值lastButtonState = reading;} 下载完代码,按下按钮,灯点亮。再按下按钮,灯熄灭。是不是很像个小台灯?

硬件分析(数字输入—数字输出)
很明显,大按钮是输入设备,LED是输出设备。和前面感应灯类似,也是一个数字输入控制一个数字输出。只是形式与代码有所不同。

image004.jpg (45.62 KB, 下载次数: 8)

下载附件

保存到相册

2015-9-18 14:10 上传

代码回顾由硬件分析可以看出,按键是输入设备,LED是输出设备。pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); 通过digitalWrite()读取按键的状态:int reading = digitalRead(buttonPin); 按键在由低变高或者由高变低时,都会有个抖动的过程,时间非常的短,如下图所示:

image005.jpg (13.21 KB, 下载次数: 8)

下载附件

保存到相册

2015-9-18 14:10 上传

为了避免由于抖动产生的错误信号,所以我们代码中有个去抖的过程。去抖的方法很简单,就是等到数据发生变化时,隔一段时间再检测一次。一旦检测到读取的数据发生变化,通过millis()函数记下时间:if (reading != lastButtonState) { lastDebounceTime =millis();} millis()是一个函数,该函数是Arduino语言自有的函数,它返回值是一个时间,Arduino开始运行到执行到当前的时间,也称之为机器时间,就像一个隐形时钟,从控制器开始运行的那一刻起开始计时,以毫秒为单位。 再等待50ms,再进行一次判断,是否和当前button状态相同。如果和当前状态不相同,改变button状态。同时,如果button状态为高(也就是被按下),那么就改变LED的状态。 if ((millis() - lastDebounceTime) > debounceDelay) { if (reading !=buttonState) { buttonState =reading; if (buttonState== HIGH) { ledState = !ledState; } }} 趣味练习
灯光门铃现在越来越多年轻人回家就塞上耳机,即使在家都听不见门铃声,那就自制一个灯光门铃,有人来了,灯就开始狂闪,提醒里面的人,门口有人在按门铃了。这样的门铃也同样适用于那些耳朵不好的老人,又或者是那些聋哑人士。
※ 在之后的Arduino学习之旅中,不管你遇到奇奇怪怪的问题,都希望你与我们交流,欢迎登陆我们的DFRobot创客社区!www.dfrobot.com.cn
下一课:项目四 声控灯

标签: Arduino教程