Arduino 外部中断和串口通信实验代码 - 按键计数与二进制显示
本教程将带领您完成 Arduino 外部中断和串口通信的实验,并提供相应的 C 语言代码。实验中,我们将使用外部中断记录按键次数,并通过串口显示按键次数。此外,我们将将两个按键的计数结果组合成十进制数,再转换为二进制数,并使用 LED 灯显示该二进制数。
实验目的:
- 掌握 Arduino 的外部中断引脚和串口通信引脚,了解其在硬件层面的应用。
- 掌握外部中断的触发方式和回调函数,以及串口通信的启动方法。
实验步骤:
① 连接 1 个按键至外部中断引脚 2 上,Arduino 记录按键次数(采用中断方式,非查询方式),并通过串口打印按键次数。
volatile int count = 0; // 定义全局变量 count,用于记录按键次数
void setup() {
pinMode(2, INPUT_PULLUP); // 将引脚 2 设置为输入模式,并启用内部上拉电阻
Serial.begin(9600); // 初始化串口通讯,波特率为 9600
attachInterrupt(digitalPinToInterrupt(2), interruptHandler, FALLING); // 将中断处理函数 interruptHandler 绑定到引脚 2 上,中断方式为下降沿触发
}
void loop() {
// 空循环,不需要处理任何事情
}
void interruptHandler() {
count++; // 每次按下按键,计数器加 1
Serial.println(count); // 通过串口输出按键次数
}
② 连接 2 个按键至外部中断引脚 2,3 上,同时自己选取其它的 5 个端口接 5 个 LED;以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将这二个按键的次数组合成十进制数后转化为二进制,要求控制 5 个 LED 以对应的二进制数显示,并将该二进制数打印在串口上显示。
volatile int count2 = 0; // 定义全局变量 count2,用于记录 2 号引脚按键次数
volatile int count3 = 0; // 定义全局变量 count3,用于记录 3 号引脚按键次数
void setup() {
pinMode(2, INPUT_PULLUP); // 将引脚 2 设置为输入模式,并启用内部上拉电阻
pinMode(3, INPUT_PULLUP); // 将引脚 3 设置为输入模式,并启用内部上拉电阻
pinMode(4, OUTPUT); // 将引脚 4 设置为输出模式
pinMode(5, OUTPUT); // 将引脚 5 设置为输出模式
pinMode(6, OUTPUT); // 将引脚 6 设置为输出模式
pinMode(7, OUTPUT); // 将引脚 7 设置为输出模式
pinMode(8, OUTPUT); // 将引脚 8 设置为输出模式
Serial.begin(9600); // 初始化串口通讯,波特率为 9600
attachInterrupt(digitalPinToInterrupt(2), interruptHandler2, FALLING); // 将中断处理函数 interruptHandler2 绑定到引脚 2 上,中断方式为下降沿触发
attachInterrupt(digitalPinToInterrupt(3), interruptHandler3, FALLING); // 将中断处理函数 interruptHandler3 绑定到引脚 3 上,中断方式为下降沿触发
}
void loop() {
int num = count2 * 10 + count3; // 将 2 号引脚按键次数作为十位,3 号引脚按键次数作为个位,组合成十进制数
String binary = String(num, BIN); // 将十进制数转换成二进制字符串
while (binary.length() < 5) { // 如果二进制字符串的长度不足 5 位,前面补 0,使其长度为 5 位
binary = '0' + binary;
}
Serial.println(binary); // 通过串口输出二进制数
digitalWrite(4, binary.charAt(0) == '1' ? HIGH : LOW); // 如果二进制数的第一位为 1,点亮引脚 4 的 LED;否则熄灭
digitalWrite(5, binary.charAt(1) == '1' ? HIGH : LOW); // 如果二进制数的第二位为 1,点亮引脚 5 的 LED;否则熄灭
digitalWrite(6, binary.charAt(2) == '1' ? HIGH : LOW); // 如果二进制数的第三位为 1,点亮引脚 6 的 LED;否则熄灭
digitalWrite(7, binary.charAt(3) == '1' ? HIGH : LOW); // 如果二进制数的第四位为 1,点亮引脚 7 的 LED;否则熄灭
digitalWrite(8, binary.charAt(4) == '1' ? HIGH : LOW); // 如果二进制数的第五位为 1,点亮引脚 8 的 LED;否则熄灭
}
void interruptHandler2() {
count2++; // 每次按下引脚 2 上的按键,计数器 count2 加 1
}
void interruptHandler3() {
count3++; // 每次按下引脚 3 上的按键,计数器 count3 加 1
}
实验总结:
本教程详细介绍了 Arduino 外部中断和串口通信的实验步骤,并提供了完整的代码示例。通过该实验,您可以加深对 Arduino 外部中断和串口通信的理解,并掌握相关应用技巧。
进一步探索:
- 可以尝试使用多个外部中断引脚,实现更复杂的控制功能。
- 可以尝试使用不同的串口通信协议,例如 I2C 或 SPI。
- 可以尝试将该实验与其他 Arduino 功能结合,实现更丰富多彩的应用。
原文地址: https://www.cveoy.top/t/topic/nP6x 著作权归作者所有。请勿转载和采集!