Arduino 外部中断与串口通信实验:按键计数和二进制 LED 显示

本实验演示如何使用 Arduino 的外部中断引脚实现按键计数,并通过串口通信和 LED 灯显示计数结果。实验包含两个部分:单按键计数和双按键计数,并利用二进制编码控制 LED 灯显示双按键计数的结果。

目的:

  • 掌握 Arduino 的外部中断引脚有哪些,串行通行的接口是哪几个引脚,这在硬件层面上的应用很重要。
  • 掌握外部中断的触发与回调函数,串口通行的启动等。

实验内容:

  1. **单按键计数:**连接 1 个按键至外部中断引脚 2 上,Arduino 记录按键次数(采用中断方式,非查询方式),并通过串口打印按键次数。
  2. **双按键计数和二进制 LED 显示:**连接 2 个按键至外部中断引脚 2 和 3 上,同时自己选取其它的 5 个端口接 5 个 LED;以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将这二个按键的次数组合成十进制数后转化为二进制,要求控制 5 个 LED 以对应的二进制数显示,并将该二进制数打印在串口上显示。举例:2 号引脚按了 2 下,3 号引脚按了 3 下,获得十进制数 23,对应二进制数为 00010111,即控制标红的这四个灯点亮,并且串口显示 10111。

实验代码:

// 定义外部中断引脚和LED引脚
#define INT_PIN_2 2
#define INT_PIN_3 3
#define LED_PIN_1 4
#define LED_PIN_2 5
#define LED_PIN_3 6
#define LED_PIN_4 7
#define LED_PIN_5 8

// 定义变量
volatile int count_2 = 0;
volatile int count_3 = 0;
int decimal = 0;
int binary = 0;

void setup() {
  // 初始化串口通讯
  Serial.begin(9600);
  
  // 设置外部中断引脚为输入模式
  pinMode(INT_PIN_2, INPUT_PULLUP);
  pinMode(INT_PIN_3, INPUT_PULLUP);

  // 设置LED引脚为输出模式
  pinMode(LED_PIN_1, OUTPUT);
  pinMode(LED_PIN_2, OUTPUT);
  pinMode(LED_PIN_3, OUTPUT);
  pinMode(LED_PIN_4, OUTPUT);
  pinMode(LED_PIN_5, OUTPUT);

  // 设置外部中断触发方式为下降沿触发
  attachInterrupt(digitalPinToInterrupt(INT_PIN_2), count_2_isr, FALLING);
  attachInterrupt(digitalPinToInterrupt(INT_PIN_3), count_3_isr, FALLING);
}

void loop() {
  // 将十进制数转化为二进制数并控制LED显示
  decimal = count_2 * 10 + count_3;
  binary = dec2bin(decimal);
  digitalWrite(LED_PIN_1, bitRead(binary, 0));
  digitalWrite(LED_PIN_2, bitRead(binary, 1));
  digitalWrite(LED_PIN_3, bitRead(binary, 2));
  digitalWrite(LED_PIN_4, bitRead(binary, 3));
  digitalWrite(LED_PIN_5, bitRead(binary, 4));

  // 串口输出二进制数
  Serial.println(binary, BIN);
}

// 外部中断回调函数,计数器加一
void count_2_isr() {
  count_2++;
}

void count_3_isr() {
  count_3++;
}

// 十进制数转化为二进制数
int dec2bin(int dec) {
  int bin = 0;
  for (int i = 0; dec > 0; i++) {
    bin += (dec % 2) * pow(10, i);
    dec /= 2;
  }
  return bin;
}

实验步骤:

  1. 连接电路,将按键连接到外部中断引脚,LED 连接到指定的输出引脚。
  2. 将代码上传到 Arduino 开发板。
  3. 运行程序,测试按键计数功能和 LED 显示功能。

实验注意事项:

  • 确保按键连接到正确的外部中断引脚。
  • 确保 LED 连接到正确的输出引脚。
  • 在编写代码时,注意变量类型的选择,例如 volatile 关键字用于声明可能被中断函数修改的变量。

实验扩展:

  • 可以尝试使用不同的外部中断触发方式,例如上升沿触发、变化触发等。
  • 可以尝试使用更多的按键和 LED,实现更复杂的显示效果。
  • 可以尝试使用其他串口通信协议,例如 I2C、SPI 等。

实验总结:

通过本实验,可以学习到 Arduino 的外部中断机制和串口通信技术,以及如何使用二进制编码控制 LED 显示。这些知识可以帮助你进行更复杂的功能开发,例如电子游戏、机器人控制等。

Arduino 外部中断与串口通信实验:按键计数和二进制 LED 显示

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

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