Arduino 外部中断与串口通信实验:按键计数和二进制 LED 显示
Arduino 外部中断与串口通信实验:按键计数和二进制 LED 显示
本实验演示如何使用 Arduino 的外部中断引脚实现按键计数,并通过串口通信和 LED 灯显示计数结果。实验包含两个部分:单按键计数和双按键计数,并利用二进制编码控制 LED 灯显示双按键计数的结果。
目的:
- 掌握 Arduino 的外部中断引脚有哪些,串行通行的接口是哪几个引脚,这在硬件层面上的应用很重要。
- 掌握外部中断的触发与回调函数,串口通行的启动等。
实验内容:
- **单按键计数:**连接 1 个按键至外部中断引脚 2 上,Arduino 记录按键次数(采用中断方式,非查询方式),并通过串口打印按键次数。
- **双按键计数和二进制 LED 显示:**连接 2 个按键至外部中断引脚 2 和 3 上,同时自己选取其它的 5 个端口接 5 个 LED;以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将这二个按键的次数组合成十进制数后转化为二进制,要求控制 5 个 LED 以对应的二进制数显示,并将该二进制数打印在串口上显示。举例:2 号引脚按了 2 下,3 号引脚按了 3 下,获得十进制数 23,对应二进制数为 00010111,即控制标红的这四个灯点亮,并且串口显示 10111。
实验代码:
// 定义外部中断引脚和LED引脚
#define INT_PIN_2 2
#define INT_PIN_3 3
#define LED_PIN_1 4
#define LED_PIN_2 5
#define LED_PIN_3 6
#define LED_PIN_4 7
#define LED_PIN_5 8
// 定义变量
volatile int count_2 = 0;
volatile int count_3 = 0;
int decimal = 0;
int binary = 0;
void setup() {
// 初始化串口通讯
Serial.begin(9600);
// 设置外部中断引脚为输入模式
pinMode(INT_PIN_2, INPUT_PULLUP);
pinMode(INT_PIN_3, INPUT_PULLUP);
// 设置LED引脚为输出模式
pinMode(LED_PIN_1, OUTPUT);
pinMode(LED_PIN_2, OUTPUT);
pinMode(LED_PIN_3, OUTPUT);
pinMode(LED_PIN_4, OUTPUT);
pinMode(LED_PIN_5, OUTPUT);
// 设置外部中断触发方式为下降沿触发
attachInterrupt(digitalPinToInterrupt(INT_PIN_2), count_2_isr, FALLING);
attachInterrupt(digitalPinToInterrupt(INT_PIN_3), count_3_isr, FALLING);
}
void loop() {
// 将十进制数转化为二进制数并控制LED显示
decimal = count_2 * 10 + count_3;
binary = dec2bin(decimal);
digitalWrite(LED_PIN_1, bitRead(binary, 0));
digitalWrite(LED_PIN_2, bitRead(binary, 1));
digitalWrite(LED_PIN_3, bitRead(binary, 2));
digitalWrite(LED_PIN_4, bitRead(binary, 3));
digitalWrite(LED_PIN_5, bitRead(binary, 4));
// 串口输出二进制数
Serial.println(binary, BIN);
}
// 外部中断回调函数,计数器加一
void count_2_isr() {
count_2++;
}
void count_3_isr() {
count_3++;
}
// 十进制数转化为二进制数
int dec2bin(int dec) {
int bin = 0;
for (int i = 0; dec > 0; i++) {
bin += (dec % 2) * pow(10, i);
dec /= 2;
}
return bin;
}
实验步骤:
- 连接电路,将按键连接到外部中断引脚,LED 连接到指定的输出引脚。
- 将代码上传到 Arduino 开发板。
- 运行程序,测试按键计数功能和 LED 显示功能。
实验注意事项:
- 确保按键连接到正确的外部中断引脚。
- 确保 LED 连接到正确的输出引脚。
- 在编写代码时,注意变量类型的选择,例如
volatile关键字用于声明可能被中断函数修改的变量。
实验扩展:
- 可以尝试使用不同的外部中断触发方式,例如上升沿触发、变化触发等。
- 可以尝试使用更多的按键和 LED,实现更复杂的显示效果。
- 可以尝试使用其他串口通信协议,例如 I2C、SPI 等。
实验总结:
通过本实验,可以学习到 Arduino 的外部中断机制和串口通信技术,以及如何使用二进制编码控制 LED 显示。这些知识可以帮助你进行更复杂的功能开发,例如电子游戏、机器人控制等。
原文地址: https://www.cveoy.top/t/topic/nP8Y 著作权归作者所有。请勿转载和采集!