Arduino 外部中断与串口通信实验:按键计数与LED控制
Arduino 外部中断与串口通信实验:按键计数与 LED 控制
实验目的:
- 掌握 Arduino 的外部中断引脚(例如 2 号和 3 号引脚)以及串口通信接口的使用。
- 理解外部中断的触发机制和回调函数。
- 掌握串口通信的启动和数据发送。
实验器材:
- Arduino UNO 开发板
- 1 个按键
- 2 个按键
- 5 个 LED 灯
- 杜邦线
实验步骤:
-
连接按键和 LED:
- 将第一个按键的一端连接到数字引脚 2,另一端连接到 GND。
- 将第二个按键的一端连接到数字引脚 3,另一端连接到 GND。
- 将 5 个 LED 的正极分别连接到数字引脚 4-8,负极连接到 GND。
-
编写代码:
int count_2 = 0; // 2 号引脚按键计数器
int count_3 = 0; // 3 号引脚按键计数器
void setup() {
pinMode(2, INPUT_PULLUP); // 设置 2 号引脚为输入模式,启用内部上拉电阻
pinMode(3, INPUT_PULLUP); // 设置 3 号引脚为输入模式,启用内部上拉电阻
pinMode(4, OUTPUT); // 设置 4 号引脚为输出模式,用于控制 LED
pinMode(5, OUTPUT); // 设置 5 号引脚为输出模式,用于控制 LED
pinMode(6, OUTPUT); // 设置 6 号引脚为输出模式,用于控制 LED
pinMode(7, OUTPUT); // 设置 7 号引脚为输出模式,用于控制 LED
pinMode(8, OUTPUT); // 设置 8 号引脚为输出模式,用于控制 LED
Serial.begin(9600); // 启动串口通信
attachInterrupt(digitalPinToInterrupt(2), isr_2, FALLING); // 将 2 号引脚设置为中断触发引脚,中断类型为下降沿触发
attachInterrupt(digitalPinToInterrupt(3), isr_3, FALLING); // 将 3 号引脚设置为中断触发引脚,中断类型为下降沿触发
}
void loop() {
}
void isr_2() { // 2 号引脚中断函数
count_2++; // 按键计数器加 1
Serial.print('2 号引脚按键次数: ');
Serial.println(count_2); // 打印按键次数
}
void isr_3() { // 3 号引脚中断函数
count_3++; // 按键计数器加 1
int num = count_2 * 10 + count_3; // 将计数器值合并为十进制数
String binary = String(num, BIN); // 将十进制数转化为二进制字符串
Serial.print('二进制数: ');
Serial.println(binary); // 打印二进制数
for (int i = 0; i < 5; i++) { // 控制 LED 点亮
if (binary.charAt(i) == '1') { // 如果二进制数的第 i 位为 1,则点亮第 i 个 LED
digitalWrite(i + 4, HIGH);
} else {
digitalWrite(i + 4, LOW); // 否则关闭第 i 个 LED
}
}
}
-
上传代码:
- 将 Arduino 开发板通过 USB 连接到电脑。
- 选择对应的板子和串口,点击上传按钮将代码上传到开发板中。
-
实验验证:
- 按下连接到 2 号引脚的按键,通过串口监视器观察计数器的值是否增加。
- 按下连接到 2 号和 3 号引脚的按键,通过串口监视器观察 LED 是否按照计数器的值点亮,并观察串口监视器是否打印出计数器的二进制数。
实验说明:
- 代码中使用了
attachInterrupt()函数将外部中断与中断服务函数关联,当按键按下时会触发对应的中断函数。 - 中断函数
isr_2和isr_3分别负责对 2 号和 3 号引脚的按键计数。 isr_3函数将两个计数器值合并为十进制数,并将其转换为二进制字符串,然后使用digitalWrite()函数控制 LED 点亮。Serial.print()和Serial.println()函数用于将信息发送到串口监视器。
注意:
- 在代码中,将 2 号和 3 号引脚设置为输入模式,并启用内部上拉电阻,这样在按键未按下时引脚为高电平,按下时为低电平。
- 中断类型为下降沿触发,即当引脚电平从高电平变为低电平时触发中断。
- 可以根据需要调整 LED 连接的引脚和中断服务函数的代码。
原文地址: https://www.cveoy.top/t/topic/nPsO 著作权归作者所有。请勿转载和采集!