Arduino 外部中断与串口通信实验:按键计数与 LED 控制

实验目的:

  • 掌握 Arduino 的外部中断引脚(例如 2 号和 3 号引脚)以及串口通信接口的使用。
  • 理解外部中断的触发机制和回调函数。
  • 掌握串口通信的启动和数据发送。

实验器材:

  • Arduino UNO 开发板
  • 1 个按键
  • 2 个按键
  • 5 个 LED 灯
  • 杜邦线

实验步骤:

  1. 连接按键和 LED:

    • 将第一个按键的一端连接到数字引脚 2,另一端连接到 GND。
    • 将第二个按键的一端连接到数字引脚 3,另一端连接到 GND。
    • 将 5 个 LED 的正极分别连接到数字引脚 4-8,负极连接到 GND。
  2. 编写代码:

int count_2 = 0; // 2 号引脚按键计数器
int count_3 = 0; // 3 号引脚按键计数器

void setup() {
  pinMode(2, INPUT_PULLUP); // 设置 2 号引脚为输入模式,启用内部上拉电阻
  pinMode(3, INPUT_PULLUP); // 设置 3 号引脚为输入模式,启用内部上拉电阻
  pinMode(4, OUTPUT); // 设置 4 号引脚为输出模式,用于控制 LED
  pinMode(5, OUTPUT); // 设置 5 号引脚为输出模式,用于控制 LED
  pinMode(6, OUTPUT); // 设置 6 号引脚为输出模式,用于控制 LED
  pinMode(7, OUTPUT); // 设置 7 号引脚为输出模式,用于控制 LED
  pinMode(8, OUTPUT); // 设置 8 号引脚为输出模式,用于控制 LED
  Serial.begin(9600); // 启动串口通信
  attachInterrupt(digitalPinToInterrupt(2), isr_2, FALLING); // 将 2 号引脚设置为中断触发引脚,中断类型为下降沿触发
  attachInterrupt(digitalPinToInterrupt(3), isr_3, FALLING); // 将 3 号引脚设置为中断触发引脚,中断类型为下降沿触发
}

void loop() {
}

void isr_2() { // 2 号引脚中断函数
  count_2++; // 按键计数器加 1
  Serial.print('2 号引脚按键次数: ');
  Serial.println(count_2); // 打印按键次数
}

void isr_3() { // 3 号引脚中断函数
  count_3++; // 按键计数器加 1
  int num = count_2 * 10 + count_3; // 将计数器值合并为十进制数
  String binary = String(num, BIN); // 将十进制数转化为二进制字符串
  Serial.print('二进制数: ');
  Serial.println(binary); // 打印二进制数
  for (int i = 0; i < 5; i++) { // 控制 LED 点亮
    if (binary.charAt(i) == '1') { // 如果二进制数的第 i 位为 1,则点亮第 i 个 LED
      digitalWrite(i + 4, HIGH);
    } else {
      digitalWrite(i + 4, LOW); // 否则关闭第 i 个 LED
    }  
  }
}
  1. 上传代码:

    • 将 Arduino 开发板通过 USB 连接到电脑。
    • 选择对应的板子和串口,点击上传按钮将代码上传到开发板中。
  2. 实验验证:

    • 按下连接到 2 号引脚的按键,通过串口监视器观察计数器的值是否增加。
    • 按下连接到 2 号和 3 号引脚的按键,通过串口监视器观察 LED 是否按照计数器的值点亮,并观察串口监视器是否打印出计数器的二进制数。

实验说明:

  • 代码中使用了 attachInterrupt() 函数将外部中断与中断服务函数关联,当按键按下时会触发对应的中断函数。
  • 中断函数 isr_2isr_3 分别负责对 2 号和 3 号引脚的按键计数。
  • isr_3 函数将两个计数器值合并为十进制数,并将其转换为二进制字符串,然后使用 digitalWrite() 函数控制 LED 点亮。
  • Serial.print()Serial.println() 函数用于将信息发送到串口监视器。

注意:

  • 在代码中,将 2 号和 3 号引脚设置为输入模式,并启用内部上拉电阻,这样在按键未按下时引脚为高电平,按下时为低电平。
  • 中断类型为下降沿触发,即当引脚电平从高电平变为低电平时触发中断。
  • 可以根据需要调整 LED 连接的引脚和中断服务函数的代码。
Arduino 外部中断与串口通信实验:按键计数与LED控制

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

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