本教程将带你进行 Arduino 外部中断与串口通信的实验,并提供完整的 C 语言代码,帮助你掌握以下知识点:

  • Arduino 的外部中断引脚有哪些,串行通行的接口是哪几个引脚,以及它们在硬件层面上的重要应用。
  • 如何使用外部中断的触发与回调函数,以及如何启动串口通信。

实验步骤

实验一:单按键计数

  1. 连接一个按键到 Arduino 的外部中断引脚 2 上。
  2. 使用中断方式(而非查询方式)记录按键次数。
  3. 通过串口打印按键次数。

实验二:双按键计数与 LED 控制

  1. 连接两个按键分别到 Arduino 的外部中断引脚 2 和 3 上。
  2. 自行选择其他 5 个端口连接 5 个 LED。
  3. 以 2 号引脚按键次数为十位,3 号引脚按键次数为个位,将两个按键的次数组合成十进制数。
  4. 将十进制数转换为二进制数。
  5. 控制 5 个 LED 以对应的二进制数显示。
  6. 将该二进制数打印在串口上显示。

代码示例

const int buttonPin2 = 2;    // 外部中断引脚2连接的按键
const int buttonPin3 = 3;    // 外部中断引脚3连接的按键
const int ledPin1 = 4;       // LED1的引脚
const int ledPin2 = 5;       // LED2的引脚
const int ledPin3 = 6;       // LED3的引脚
const int ledPin4 = 7;       // LED4的引脚
const int ledPin5 = 8;       // LED5的引脚

volatile int count2 = 0;     // 外部中断引脚2上按键次数
volatile int count3 = 0;     // 外部中断引脚3上按键次数

void setup() {
  pinMode(buttonPin2, INPUT_PULLUP);  // 使能外部中断引脚2上的上拉电阻
  pinMode(buttonPin3, INPUT_PULLUP);  // 使能外部中断引脚3上的上拉电阻
  pinMode(ledPin1, OUTPUT);          // 将LED1引脚设为输出模式
  pinMode(ledPin2, OUTPUT);          // 将LED2引脚设为输出模式
  pinMode(ledPin3, OUTPUT);          // 将LED3引脚设为输出模式
  pinMode(ledPin4, OUTPUT);          // 将LED4引脚设为输出模式
  pinMode(ledPin5, OUTPUT);          // 将LED5引脚设为输出模式

  attachInterrupt(digitalPinToInterrupt(buttonPin2), button2ISR, FALLING);  // 附加外部中断2的回调函数
  attachInterrupt(digitalPinToInterrupt(buttonPin3), button3ISR, FALLING);  // 附加外部中断3的回调函数

  Serial.begin(9600);     // 打开串口通讯
}

void loop() {
  int num = count2 * 10 + count3;   // 获得按键次数组成的十进制数
  int bin = dec2bin(num);           // 转换为二进制数

  digitalWrite(ledPin1, (bin >> 0) & 0x01);   // 控制LED1
  digitalWrite(ledPin2, (bin >> 1) & 0x01);   // 控制LED2
  digitalWrite(ledPin3, (bin >> 2) & 0x01);   // 控制LED3
  digitalWrite(ledPin4, (bin >> 3) & 0x01);   // 控制LED4
  digitalWrite(ledPin5, (bin >> 4) & 0x01);   // 控制LED5

  Serial.println(bin, BIN);   // 打印二进制数
}

void button2ISR() {
  count2++;       // 按键次数加1
  Serial.println(count2);   // 打印按键次数
}

void button3ISR() {
  count3++;       // 按键次数加1
  Serial.println(count3);   // 打印按键次数
}

int dec2bin(int num) {
  int bin = 0;
  int base = 1;
  while (num > 0) {
    bin += (num % 2) * base;
    num /= 2;
    base *= 10;
  }
  return bin;
}

实验结果

  1. 当按下连接到外部中断引脚 2 上的按键时,串口会打印按键次数。
  2. 当按下连接到外部中断引脚 2 和 3 上的按键时,LED 会根据按键次数组合成的二进制数显示,同时串口会打印二进制数。

总结

通过本教程,你已经学会了如何使用 Arduino 的外部中断和串口通信来实现按键计数和 LED 控制。这些知识点在许多 Arduino 项目中都有广泛的应用,例如:

  • 用按键控制机器人的运动方向
  • 用传感器采集数据并通过串口发送到电脑
  • 用 LED 显示时间或其他信息

希望本教程对你有所帮助!


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

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