前言
本章节介绍如何通过按键控制LED灯,在上一章节中,我们学习了如何控制IO输出电平。而本章节,我们将学会如何读取IO输入的电平。
硬件介绍
观察独立按键,共有四个引脚,其中两组间距较短,而另两组间距较长。间距长的两组引脚之间是连接在一起的,而短间距引脚之间初始状态是断开的,当按键被按下时,四个引脚被接通,可视作一根导线。
一般情况下,独立按键只需要接两个脚即可使用。其中一个引脚接地,另一个引脚由单片机IO口控制。
独立按键的详细介绍请参考另一篇博客《51单片机开关篇》
实物接线图
软件实现
为了读取引脚的输入情况,我们需要借助串口工具。幸运的是,Arduino IDE中集成了串口显示窗口,我们可以十分方便地通过几行代码就实现打印引脚状态。
库函数介绍
首先,介绍几个核心库中的函数。详细的移步至官方函数手册。
- 数字引脚读取
uint8_t digitalRead(uint8_t pin)
- pin: 引脚号
- 返回值: 引脚电平高低
- 低电平: LOW
- 高电平: HIGH
串口库(Serial
)属于内置核心库,无需#include
预编译指令包含。本节使用到的函数如下。
- 串口初始化
Serial.begin(baud)
- baud: 波特率,需与串口窗口中保持一致。
- 串口打印
Serial.println(chara)
- chara: 可接收任意类型数据。
- 打印后开启新行。
程序代码
// 2022.11.18
// Author:Qiu
#define KEY_PORT 2 // 2号引脚
void setup() {
// 设置串口波特率
Serial.begin(9600);
// 将2号引脚设置为输入上拉
pinMode(KEY_PORT, INPUT_PULLUP);
// 将13号引脚设置为输出;
// #define LED_BUILTIN 13
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// 读取2号引脚的状态
boolean buttonState = digitalRead(KEY_PORT);
// 在串口窗口打印引脚状态
Serial.println(buttonState);
// 判断控制灯:0-按下;1-没按
if(buttonState){
// 熄灭,写入低电平
digitalWrite(LED_BUILTIN, LOW);
}else{
// 点亮,写入高电平
digitalWrite(LED_BUILTIN, HIGH);
}
// 读取存在间隔,保证稳定
delay(1);
}
下一篇的目标
我们希望更加高级的控制LED灯,比如,动态调节它的亮度,而不是简单的亮灭。我们下一篇再见!
总结
通过本章,你学会了如何读取数字IO口的高低电平,并借助串口相关函数完成了按键的控制LED的实验。这为未来我们控制机械臂奠定了坚实的基础!