Arduino 外部中断与串口通信实验:C语言代码实现
本教程将通过 Arduino 外部中断和串口通信实验,帮助您学习 Arduino 的外部中断引脚、串口通信接口以及相关应用。
您将学习如何使用外部中断触发回调函数,实现按键次数统计,并通过串口打印结果。同时,您还会学习如何将两个按键的次数组合成十进制数,并转化为二进制数,控制多个 LED 灯的亮灭,并在串口上显示二进制数。
实验一:单个按键次数统计
目标: 连接 1 个按键至外部中断引脚 2 上,Arduino 记录按键次数(采用中断方式,非查询方式),并通过串口打印按键次数。
代码:
int buttonPin = 2; //按键接口
volatile int buttonCount = 0; //按键次数
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP); //设置按键接口为输入并上拉
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonInterrupt, FALLING); //设置中断回调函数
}
void loop() {
Serial.print('Button count: ');
Serial.println(buttonCount); //每隔一秒打印按键次数
delay(1000);
}
void buttonInterrupt() {
buttonCount++; //中断回调函数,按键次数加1
}
实验二:双按键控制 LED
目标: 连接 2 个按键至外部中断引脚 2,3 上,同时自己选取其它的 5 个端口接 5 个 LED;以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将这二个按键的次数组合成十进制数后转化为二进制,要求控制 5 个 LED 以对应的二进制数显示,并将该二进制数打印在串口上显示。举例:2 号引脚按了 2 下,3 号引脚按了 3 下,获得十进制数 23,对应二进制数为 00010111,即控制标红的这四个灯点亮,并且串口显示 10111。
代码:
int buttonPin1 = 2; //按键1接口
int buttonPin2 = 3; //按键2接口
int ledPins[5] = {4, 5, 6, 7, 8}; //LED接口
volatile int buttonCount1 = 0; //按键1次数
volatile int buttonCount2 = 0; //按键2次数
int decimalNum = 0; //十进制数
int binaryNum[5] = {0, 0, 0, 0, 0}; //二进制数
void setup() {
Serial.begin(9600);
pinMode(buttonPin1, INPUT_PULLUP); //设置按键1接口为输入并上拉
pinMode(buttonPin2, INPUT_PULLUP); //设置按键2接口为输入并上拉
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT); //设置LED接口为输出
}
attachInterrupt(digitalPinToInterrupt(buttonPin1), buttonInterrupt1, FALLING); //设置按键1中断回调函数
attachInterrupt(digitalPinToInterrupt(buttonPin2), buttonInterrupt2, FALLING); //设置按键2中断回调函数
}
void loop() {
decimalNum = buttonCount1 * 10 + buttonCount2; //将按键次数组合成十进制数
for (int i = 0; i < 5; i++) {
binaryNum[i] = decimalNum % 2; //将十进制数转化为二进制数
decimalNum /= 2;
}
for (int i = 0; i < 5; i++) {
digitalWrite(ledPins[i], binaryNum[i]); //根据二进制数控制LED亮灭
}
Serial.print('Binary number: ');
for (int i = 4; i >= 0; i--) {
Serial.print(binaryNum[i]); //打印二进制数
}
Serial.println();
delay(100);
}
void buttonInterrupt1() {
buttonCount1++; //按键1中断回调函数,按键1次数加1
}
void buttonInterrupt2() {
buttonCount2++; //按键2中断回调函数,按键2次数加1
}
总结
通过这两个实验,您应该已经掌握了 Arduino 的外部中断引脚、串口通信接口以及相关应用。您还学习了如何使用外部中断触发回调函数,实现按键次数统计,并通过串口打印结果。同时,您还学习了如何将两个按键的次数组合成十进制数,并转化为二进制数,控制多个 LED 灯的亮灭,并在串口上显示二进制数。
希望本教程对您有所帮助。如果您有任何问题,请随时在评论区留言。
原文地址: https://www.cveoy.top/t/topic/nP6r 著作权归作者所有。请勿转载和采集!