Hi,大家好!今天我们将综合之前学到的,关于如何更好的使用按键开关等相关知识,做一个综合的小实验,看看如何用按键开关进行计数。当然,与其说是用按键开关进行计数,其实不如说是记录按键开关的点击次数,嘿嘿!好!打起精神,让我们开始吧!
首先,当然还是老样子,先要对所学的内容做准备。
硬件方面
image.png


具体包括如下:

  • Arduino UNO电路板(1块)
  • 面包板(1块)
  • 10k电阻(1个)
  • 按键开关(1个)
  • 面包线(3根)
看!电路配件还是之前碰到的电路配件!没有新面孔出现,继续!
软件方面Arduino官方提供的IDE。
image.png

嗯!电路连接还是之前碰到的电路连接!简单吧!就剩下最后一步拉!
添加几行代码首先,还是新建一个项目窗口。

下面就不能再一样了,哈哈!!不过,虽说不一样了,但也只是综合了前面所学的相关知识。
// 定义按键的针脚号为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这块憨厚老实的电路板,总是默默无闻的任你使唤。接下来,我们要让她发出自己的声音。答对了!我们要听听她那令人陶醉的歌喉!