本教程将带领您完成 Arduino 外部中断和串口通信的实验,并提供相应的 C 语言代码。实验中,我们将使用外部中断记录按键次数,并通过串口显示按键次数。此外,我们将将两个按键的计数结果组合成十进制数,再转换为二进制数,并使用 LED 灯显示该二进制数。

实验目的:

  • 掌握 Arduino 的外部中断引脚和串口通信引脚,了解其在硬件层面的应用。
  • 掌握外部中断的触发方式和回调函数,以及串口通信的启动方法。

实验步骤:

① 连接 1 个按键至外部中断引脚 2 上,Arduino 记录按键次数(采用中断方式,非查询方式),并通过串口打印按键次数。

volatile int count = 0; // 定义全局变量 count,用于记录按键次数

void setup() {
  pinMode(2, INPUT_PULLUP); // 将引脚 2 设置为输入模式,并启用内部上拉电阻
  Serial.begin(9600); // 初始化串口通讯,波特率为 9600
  attachInterrupt(digitalPinToInterrupt(2), interruptHandler, FALLING); // 将中断处理函数 interruptHandler 绑定到引脚 2 上,中断方式为下降沿触发
}

void loop() {
  // 空循环,不需要处理任何事情
}

void interruptHandler() {
  count++; // 每次按下按键,计数器加 1
  Serial.println(count); // 通过串口输出按键次数
}

② 连接 2 个按键至外部中断引脚 2,3 上,同时自己选取其它的 5 个端口接 5 个 LED;以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将这二个按键的次数组合成十进制数后转化为二进制,要求控制 5 个 LED 以对应的二进制数显示,并将该二进制数打印在串口上显示。

volatile int count2 = 0; // 定义全局变量 count2,用于记录 2 号引脚按键次数
volatile int count3 = 0; // 定义全局变量 count3,用于记录 3 号引脚按键次数

void setup() {
  pinMode(2, INPUT_PULLUP); // 将引脚 2 设置为输入模式,并启用内部上拉电阻
  pinMode(3, INPUT_PULLUP); // 将引脚 3 设置为输入模式,并启用内部上拉电阻
  pinMode(4, OUTPUT); // 将引脚 4 设置为输出模式
  pinMode(5, OUTPUT); // 将引脚 5 设置为输出模式
  pinMode(6, OUTPUT); // 将引脚 6 设置为输出模式
  pinMode(7, OUTPUT); // 将引脚 7 设置为输出模式
  pinMode(8, OUTPUT); // 将引脚 8 设置为输出模式
  Serial.begin(9600); // 初始化串口通讯,波特率为 9600
  attachInterrupt(digitalPinToInterrupt(2), interruptHandler2, FALLING); // 将中断处理函数 interruptHandler2 绑定到引脚 2 上,中断方式为下降沿触发
  attachInterrupt(digitalPinToInterrupt(3), interruptHandler3, FALLING); // 将中断处理函数 interruptHandler3 绑定到引脚 3 上,中断方式为下降沿触发
}

void loop() {
  int num = count2 * 10 + count3; // 将 2 号引脚按键次数作为十位,3 号引脚按键次数作为个位,组合成十进制数
  String binary = String(num, BIN); // 将十进制数转换成二进制字符串
  while (binary.length() < 5) { // 如果二进制字符串的长度不足 5 位,前面补 0,使其长度为 5 位
    binary = '0' + binary;
  }
  Serial.println(binary); // 通过串口输出二进制数
  digitalWrite(4, binary.charAt(0) == '1' ? HIGH : LOW); // 如果二进制数的第一位为 1,点亮引脚 4 的 LED;否则熄灭
  digitalWrite(5, binary.charAt(1) == '1' ? HIGH : LOW); // 如果二进制数的第二位为 1,点亮引脚 5 的 LED;否则熄灭
  digitalWrite(6, binary.charAt(2) == '1' ? HIGH : LOW); // 如果二进制数的第三位为 1,点亮引脚 6 的 LED;否则熄灭
  digitalWrite(7, binary.charAt(3) == '1' ? HIGH : LOW); // 如果二进制数的第四位为 1,点亮引脚 7 的 LED;否则熄灭
  digitalWrite(8, binary.charAt(4) == '1' ? HIGH : LOW); // 如果二进制数的第五位为 1,点亮引脚 8 的 LED;否则熄灭
}

void interruptHandler2() {
  count2++; // 每次按下引脚 2 上的按键,计数器 count2 加 1
}

void interruptHandler3() {
  count3++; // 每次按下引脚 3 上的按键,计数器 count3 加 1
}

实验总结:

本教程详细介绍了 Arduino 外部中断和串口通信的实验步骤,并提供了完整的代码示例。通过该实验,您可以加深对 Arduino 外部中断和串口通信的理解,并掌握相关应用技巧。

进一步探索:

  • 可以尝试使用多个外部中断引脚,实现更复杂的控制功能。
  • 可以尝试使用不同的串口通信协议,例如 I2C 或 SPI。
  • 可以尝试将该实验与其他 Arduino 功能结合,实现更丰富多彩的应用。
Arduino 外部中断和串口通信实验代码 - 按键计数与二进制显示

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

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