Hi,大家好!今天我们将综合之前学到的,关于如何更好的使用按键开关等相关知识,做一个综合的小实验,看看如何用按键开关进行计数。当然,与其说是用按键开关进行计数,其实不如说是记录按键开关的点击次数,嘿嘿!好!打起精神,让我们开始吧!
首先,当然还是老样子,先要对所学的内容做准备。
硬件方面
图片来源:Arduino电路配件
具体包括如下:
- Arduino UNO电路板(1块)
- 面包板(1块)
- 10k电阻(1个)
- 按键开关(1个)
- 面包线(3根)
看!电路配件还是之前碰到的电路配件!没有新面孔出现,继续!
软件方面Arduino官方提供的IDE。
连接电路
图片来源:Arduino连接开关按键电路示意图
嗯!电路连接还是之前碰到的电路连接!简单吧!就剩下最后一步拉!
添加几行代码首先,还是新建一个项目窗口。
图片来源:Arduino官方IDE
下面就不能再一样了,哈哈!!不过,虽说不一样了,但也只是综合了前面所学的相关知识。
- // 定义按键的针脚号为2的整型常量
- const int buttonPin = 2;
- // 定义LED输入针脚号为13号针脚
- // 注:此处我们使用的LED神灯是Arduino UNO电路板自带,
- // 此神灯对应的针脚号默认为13,此数值不得随意更改,
- // 所以这里定义的数值13是为了和默认值相对应。
- const int ledPin = 13;
- // 定义用来记录按键次数的整型变量
- int buttonPushCounter = 0;
- // 记录当前按键的状态
- int buttonState = 0;
- // 记录按键之前的状态
- int lastButtonState = 0;
- // 对Arduino电路板或相关状态进行初始化方法
- void setup() {
- // 设置按键的针脚为输入状态
- pinMode(buttonPin, INPUT);
- // 设置电路板上LED神灯的针脚状态为输出状态
- pinMode(ledPin, OUTPUT);
- // 开启串行通信,并设置其频率为9600。
- // 如果没有特别要求,此数值一般都为9600。
- Serial.begin(9600);
- }
- // 系统调用,无限循环方法
- void loop() {
- // 读取按键的输入状态
- buttonState = digitalRead(buttonPin);
- // 判断当前的按键状态是否和之前有所变化
- if (buttonState != lastButtonState) {
- // 判断当前按键是否为按下状态,
- // 如果为按下状态,则记录按键次数的变量加一。
- if (buttonState == HIGH) {
- // 将记录按键次数的变量加一
- buttonPushCounter++;
- // 向串口调试终端打印字符串“on”,
- // 表示当前按键状态为按下接通状态,
- // 输出完成之后自动换行。
- Serial.println("on");
- // 向串口调试终端打印字符串
- // “number of button pushes: ”,此处没有换行。
- Serial.print("number of button pushes: ");
- // 接着上一行尾部,打印记录按键次数变量的数值。
- Serial.println(buttonPushCounter);
- } else {
- // 向串口调试终端打印字符串“off”,
- // 表示当前按键状态为松开状态,也即断开状态。
- Serial.println("off");
- }
- // 为了避免信号互相干扰,
- // 此处将每次按键的变化时间间隔延迟50毫秒。
- delay(50);
- }
- // 将每次loop结束时最新的按键状态进行更新
- lastButtonState = buttonState;
- // 每点击4次,更新一次LED神灯状态。
- // 这里的百分号是求余数的意思,
- // 每次除以四,余数等于零说明按键点击的
- // 次数是四的整数倍,即此时更新LED神灯。
- if (buttonPushCounter % 4 == 0) {
- // 点亮LED神灯
- digitalWrite(ledPin, HIGH);
- } else {
- // 熄灭LED神灯
- digitalWrite(ledPin, LOW);
- }
- }
复制代码
代码看起来好像有点长……其实呢,如果你仔细观察,就会发现,其实百分之八十的代码都是之前学《另一种时间延迟》的时候学到的,而这次只是在其基础上加入了计数的变量而已。如果觉得眼前的代码有点眼晕,可以回过头去温习一下那篇文章。
图片来源:Arduino官方IDE的文件编辑菜单选项
好!点击一下上图中标有向右指向的箭头图标,将编写好的代码烧入Arduino UNO电路板。然后点击上图中最右侧的放大镜图标,打开串口调试窗口,如下图所示。
图片来源:Arduino串口调试窗口
此时,当你每次按下或松开按键开关,都会打印相应的字符串,来显示当前的按键状态。而与此同时,Arduino UNO电路上的LED神灯,也会在你每按四次按键更新一次状态。
总结通过此次练习,我们没有加入任何新知识,总体而言,是对前面几次的学习进行了一次综合运用。如果哪一部分看起来有点儿头晕,可以温习一下过去的几次所学。嗯,加油!
下期预告一连几次总是学习按键开关,是不是有点腻了?嗯,猜到了!下一次,我们将一起学习新内容。以前呢,Arduino UNO这块憨厚老实的电路板,总是默默无闻的任你使唤。接下来,我们要让她发出自己的声音。答对了!我们要听听她那令人陶醉的歌喉!
ohcoder的系列精彩Arduino教程:
Arduino教程-初识Arduino(包含本教程目录):http://www.51hei.com/bbs/dpj-41334-1.html
Arduino教程-开篇:http://www.51hei.com/bbs/dpj-41335-1.html
Arduino教程-点亮LED神灯:http://www.51hei.com/bbs/dpj-41336-1.html
Arduino教程-让LED神灯闪烁:http://www.51hei.com/bbs/dpj-41337-1.html
Arduino教程-让LED神灯亮度渐变:http://www.51hei.com/bbs/dpj-41338-1.html
Arduino教程-获取输入数字信号:http://www.51hei.com/bbs/dpj-41339-1.html
Arduino教程-获取输入模拟信号:http://www.51hei.com/bbs/dpj-41340-1.html
Arduino教程-另一种时间延迟:http://www.51hei.com/bbs/dpj-41331-1.html
Arduino教程-按键开关:http://www.51hei.com/bbs/dpj-41341-1.html
Arduino教程-停止抖动!:http://www.51hei.com/bbs/dpj-41333-1.html
Arduino教程-抛弃外部电阻!:http://www.51hei.com/bbs/dpj-41332-1.html
Arduino教程-用按键开关计数:http://www.51hei.com/bbs/dpj-41330-1.html
………后续持续更新中请打开:http://www.51hei.com/bbs/dpj-41334-1.html
|