本教程将通过 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 灯的亮灭,并在串口上显示二进制数。

希望本教程对您有所帮助。如果您有任何问题,请随时在评论区留言。

Arduino 外部中断与串口通信实验:C语言代码实现

原文地址: https://www.cveoy.top/t/topic/nP6r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录