Arduino 外部中断与串口通信实验教程

目的: 掌握 Arduino 的外部中断引脚、串口通信接口以及相关应用。学习如何使用外部中断实现按键计数并通过串口打印,以及将按键计数转化为二进制数控制 LED 显示。

实验内容:

  1. 连接 1 个按键至外部中断引脚 2 上,并通过串口打印按键次数。
  2. 连接 2 个按键至外部中断引脚 2 和 3 上,同时连接 5 个 LED,将按键次数转化为二进制数控制 LED 显示,并通过串口打印。

第一步:理解 Arduino 的外部中断引脚和串口通信接口。

  • Arduino 的外部中断引脚有 2、3、18、19、20、21 六个,其中 2 和 3 可以同时使用。
  • 串口通信接口有 RX 和 TX 两个引脚,分别在 Arduino 的数字引脚 0 和 1 上。

第二步:根据实验内容,进行以下步骤:

1. 连接 1 个按键至外部中断引脚 2 上,并通过串口打印按键次数。

  • 连接按键需要将其中一个引脚连接到数字引脚 2 上,另一个引脚接地。
  • 在程序中设置外部中断,并编写回调函数,在回调函数中记录按键次数并通过串口打印。

示例代码:

void setup() {
  Serial.begin(9600); // 初始化串口通信
  attachInterrupt(digitalPinToInterrupt(2), interruptHandler, FALLING); // 设置外部中断2,下降沿触发
}

volatile int count = 0; // volatile 关键字表示该变量是可变的,防止编译器优化错误

void interruptHandler() {
  count++;
  Serial.println(count);
}

void loop() {
  // 主循环留空
}

2. 连接 2 个按键至外部中断引脚 2、3 上,同时接 5 个 LED,并将按键次数转化为二进制数控制 LED 显示,并通过串口打印。

  • 连接按键和 LED 需要将两个按键分别连接到数字引脚 2 和 3 上,然后将 5 个 LED 分别连接到数字引脚 4~8 上。
  • 在程序中设置两个外部中断,并编写回调函数,在回调函数中记录按键次数并转化为二进制数,然后控制 LED 显示。

示例代码:

void setup() {
  Serial.begin(9600); // 初始化串口通信
  attachInterrupt(digitalPinToInterrupt(2), interruptHandler2, FALLING); // 设置外部中断2,下降沿触发
  attachInterrupt(digitalPinToInterrupt(3), interruptHandler3, FALLING); // 设置外部中断3,下降沿触发
  pinMode(4, OUTPUT); // 设置数字引脚 4~8 为输出模式
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
}

volatile int count2 = 0;
volatile int count3 = 0;

void interruptHandler2() {
  count2++;
  updateLED();
}

void interruptHandler3() {
  count3++;
  updateLED();
}

void updateLED() {
  int decimal = count2 * 10 + count3; // 计算十进制数
  int binary = dec2bin(decimal); // 转化为二进制数
  digitalWrite(4, binary & 1); // 通过位运算控制 LED 状态
  digitalWrite(5, binary >> 1 & 1);
  digitalWrite(6, binary >> 2 & 1);
  digitalWrite(7, binary >> 3 & 1);
  digitalWrite(8, binary >> 4 & 1);
  Serial.println(binary, BIN); // 打印二进制数
}

int dec2bin(int decimal) {
  int binary = 0;
  int factor = 1;
  while (decimal > 0) {
    binary += (decimal % 2) * factor;
    decimal /= 2;
    factor *= 10;
  }
  return binary;
}

void loop() {
  // 主循环留空
}

注意事项:

  1. 外部中断回调函数中尽量不要进行太复杂的操作,防止影响中断的响应时间和稳定性。
  2. 外部中断触发时会打断程序的正常执行,需要注意程序的设计和调试。
  3. 串口通信需要在程序中进行初始化,并设置波特率等参数。
Arduino 外部中断与串口通信实验教程

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

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