Arduino 外部中断与串口通信实验:C语言代码实现按键计数与 LED 控制
本教程将带你进行 Arduino 外部中断与串口通信的实验,并提供完整的 C 语言代码,帮助你掌握以下知识点:
- Arduino 的外部中断引脚有哪些,串行通行的接口是哪几个引脚,以及它们在硬件层面上的重要应用。
- 如何使用外部中断的触发与回调函数,以及如何启动串口通信。
实验步骤
实验一:单按键计数
- 连接一个按键到 Arduino 的外部中断引脚 2 上。
- 使用中断方式(而非查询方式)记录按键次数。
- 通过串口打印按键次数。
实验二:双按键计数与 LED 控制
- 连接两个按键分别到 Arduino 的外部中断引脚 2 和 3 上。
- 自行选择其他 5 个端口连接 5 个 LED。
- 以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将两个按键的次数组合成十进制数。
- 将十进制数转换为二进制数。
- 控制 5 个 LED 以对应的二进制数显示。
- 将该二进制数打印在串口上显示。
代码示例
const int buttonPin2 = 2; // 外部中断引脚2连接的按键
const int buttonPin3 = 3; // 外部中断引脚3连接的按键
const int ledPin1 = 4; // LED1的引脚
const int ledPin2 = 5; // LED2的引脚
const int ledPin3 = 6; // LED3的引脚
const int ledPin4 = 7; // LED4的引脚
const int ledPin5 = 8; // LED5的引脚
volatile int count2 = 0; // 外部中断引脚2上按键次数
volatile int count3 = 0; // 外部中断引脚3上按键次数
void setup() {
pinMode(buttonPin2, INPUT_PULLUP); // 使能外部中断引脚2上的上拉电阻
pinMode(buttonPin3, INPUT_PULLUP); // 使能外部中断引脚3上的上拉电阻
pinMode(ledPin1, OUTPUT); // 将LED1引脚设为输出模式
pinMode(ledPin2, OUTPUT); // 将LED2引脚设为输出模式
pinMode(ledPin3, OUTPUT); // 将LED3引脚设为输出模式
pinMode(ledPin4, OUTPUT); // 将LED4引脚设为输出模式
pinMode(ledPin5, OUTPUT); // 将LED5引脚设为输出模式
attachInterrupt(digitalPinToInterrupt(buttonPin2), button2ISR, FALLING); // 附加外部中断2的回调函数
attachInterrupt(digitalPinToInterrupt(buttonPin3), button3ISR, FALLING); // 附加外部中断3的回调函数
Serial.begin(9600); // 打开串口通讯
}
void loop() {
int num = count2 * 10 + count3; // 获得按键次数组成的十进制数
int bin = dec2bin(num); // 转换为二进制数
digitalWrite(ledPin1, (bin >> 0) & 0x01); // 控制LED1
digitalWrite(ledPin2, (bin >> 1) & 0x01); // 控制LED2
digitalWrite(ledPin3, (bin >> 2) & 0x01); // 控制LED3
digitalWrite(ledPin4, (bin >> 3) & 0x01); // 控制LED4
digitalWrite(ledPin5, (bin >> 4) & 0x01); // 控制LED5
Serial.println(bin, BIN); // 打印二进制数
}
void button2ISR() {
count2++; // 按键次数加1
Serial.println(count2); // 打印按键次数
}
void button3ISR() {
count3++; // 按键次数加1
Serial.println(count3); // 打印按键次数
}
int dec2bin(int num) {
int bin = 0;
int base = 1;
while (num > 0) {
bin += (num % 2) * base;
num /= 2;
base *= 10;
}
return bin;
}
实验结果
- 当按下连接到外部中断引脚 2 上的按键时,串口会打印按键次数。
- 当按下连接到外部中断引脚 2 和 3 上的按键时,LED 会根据按键次数组合成的二进制数显示,同时串口会打印二进制数。
总结
通过本教程,你已经学会了如何使用 Arduino 的外部中断和串口通信来实现按键计数和 LED 控制。这些知识点在许多 Arduino 项目中都有广泛的应用,例如:
- 用按键控制机器人的运动方向
- 用传感器采集数据并通过串口发送到电脑
- 用 LED 显示时间或其他信息
希望本教程对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/nP57 著作权归作者所有。请勿转载和采集!