找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 63732|回复: 3
打印 上一主题 下一主题
收起左侧

Arduino教程-用按键开关计数

[复制链接]
跳转到指定楼层
楼主
Hi,大家好!今天我们将综合之前学到的,关于如何更好的使用按键开关等相关知识,做一个综合的小实验,看看如何用按键开关进行计数。当然,与其说是用按键开关进行计数,其实不如说是记录按键开关的点击次数,嘿嘿!好!打起精神,让我们开始吧!
首先,当然还是老样子,先要对所学的内容做准备。
硬件方面
图片来源:Arduino电路配件
具体包括如下:
  • Arduino UNO电路板(1块)
  • 面包板(1块)
  • 10k电阻(1个)
  • 按键开关(1个)
  • 面包线(3根)
看!电路配件还是之前碰到的电路配件!没有新面孔出现,继续!
软件方面Arduino官方提供的IDE。
连接电路
图片来源:Arduino连接开关按键电路示意图
嗯!电路连接还是之前碰到的电路连接!简单吧!就剩下最后一步拉!
添加几行代码首先,还是新建一个项目窗口。

图片来源:Arduino官方IDE
下面就不能再一样了,哈哈!!不过,虽说不一样了,但也只是综合了前面所学的相关知识。
  1. // 定义按键的针脚号为2的整型常量
  2. const int  buttonPin = 2;
  3. // 定义LED输入针脚号为13号针脚
  4. // 注:此处我们使用的LED神灯是Arduino UNO电路板自带,
  5. // 此神灯对应的针脚号默认为13,此数值不得随意更改,
  6. // 所以这里定义的数值13是为了和默认值相对应。
  7. const int ledPin = 13;
  8. // 定义用来记录按键次数的整型变量
  9. int buttonPushCounter = 0;
  10. // 记录当前按键的状态
  11. int buttonState = 0;
  12. // 记录按键之前的状态
  13. int lastButtonState = 0;
  14. // 对Arduino电路板或相关状态进行初始化方法
  15. void setup() {
  16.   // 设置按键的针脚为输入状态
  17.   pinMode(buttonPin, INPUT);
  18.   // 设置电路板上LED神灯的针脚状态为输出状态
  19.   pinMode(ledPin, OUTPUT);
  20.   // 开启串行通信,并设置其频率为9600。
  21.   // 如果没有特别要求,此数值一般都为9600。
  22.   Serial.begin(9600);
  23. }
  24. // 系统调用,无限循环方法
  25. void loop() {
  26.   // 读取按键的输入状态
  27.   buttonState = digitalRead(buttonPin);
  28.   // 判断当前的按键状态是否和之前有所变化
  29.   if (buttonState != lastButtonState) {
  30.     // 判断当前按键是否为按下状态,
  31.     // 如果为按下状态,则记录按键次数的变量加一。
  32.     if (buttonState == HIGH) {
  33.       // 将记录按键次数的变量加一
  34.       buttonPushCounter++;
  35.       // 向串口调试终端打印字符串“on”,
  36.       // 表示当前按键状态为按下接通状态,
  37.       // 输出完成之后自动换行。
  38.       Serial.println("on");
  39.       // 向串口调试终端打印字符串
  40.       // “number of button pushes: ”,此处没有换行。
  41.       Serial.print("number of button pushes:  ");
  42.       // 接着上一行尾部,打印记录按键次数变量的数值。
  43.       Serial.println(buttonPushCounter);
  44.     } else {
  45.       // 向串口调试终端打印字符串“off”,
  46.       // 表示当前按键状态为松开状态,也即断开状态。
  47.       Serial.println("off");
  48.     }
  49.     // 为了避免信号互相干扰,
  50.     // 此处将每次按键的变化时间间隔延迟50毫秒。
  51.     delay(50);
  52.   }
  53.   // 将每次loop结束时最新的按键状态进行更新
  54.   lastButtonState = buttonState;
  55.   // 每点击4次,更新一次LED神灯状态。
  56.   // 这里的百分号是求余数的意思,
  57.   // 每次除以四,余数等于零说明按键点击的
  58.   // 次数是四的整数倍,即此时更新LED神灯。
  59.   if (buttonPushCounter % 4 == 0) {
  60.     // 点亮LED神灯
  61.     digitalWrite(ledPin, HIGH);
  62.   } else {
  63.     // 熄灭LED神灯
  64.     digitalWrite(ledPin, LOW);
  65.   }
  66. }
复制代码


代码看起来好像有点长……其实呢,如果你仔细观察,就会发现,其实百分之八十的代码都是之前学《另一种时间延迟》的时候学到的,而这次只是在其基础上加入了计数的变量而已。如果觉得眼前的代码有点眼晕,可以回过头去温习一下那篇文章。

图片来源: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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:159287 发表于 2017-1-2 00:03 | 只看该作者
特别感谢,有助于快速入门!!!
回复

使用道具 举报

板凳
ID:501815 发表于 2019-4-14 09:07 | 只看该作者
感谢楼主~!
回复

使用道具 举报

地板
ID:560595 发表于 2019-6-28 11:19 | 只看该作者
啥时候更新啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表