实验步骤:

  1. 连接 1 个按键至外部中断引脚 2 上,定义一个计数器变量 count,初始化为 0。

  2. 在 setup() 函数中,使用 attachInterrupt() 函数将中断引脚 2 绑定到一个中断服务函数中,当按键被按下时,该函数将被调用。

  3. 在中断服务函数中,每次按键被按下,将计数器变量 count 加 1,然后通过串口打印按键次数。

  4. 连接 2 个按键至外部中断引脚 2,3 上,同时连接 5 个 LED 到自己选取的 5 个端口上。

  5. 在 setup() 函数中,使用 attachInterrupt() 函数将中断引脚 2 和 3 绑定到两个不同的中断服务函数中,当按键被按下时,对应的函数将被调用。

  6. 在两个中断服务函数中,分别记录按键被按下的次数,然后将这两个计数器变量的值组合成一个十进制数,并将该数转化为二进制数。

  7. 控制 5 个 LED 的状态,使其对应二进制数的每一个位。

  8. 在串口上打印该二进制数。

代码实现:

int count = 0; // 记录按键次数
int count2 = 0; // 记录第二个按键次数
int count3 = 0; // 记录第三个按键次数
int ledPin1 = 2; // LED 1 对应引脚
int ledPin2 = 3; // LED 2 对应引脚
int ledPin3 = 4; // LED 3 对应引脚
int ledPin4 = 5; // LED 4 对应引脚
int ledPin5 = 6; // LED 5 对应引脚
 
void setup() {
  Serial.begin(9600);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(2), handleInterrupt1, FALLING);
  attachInterrupt(digitalPinToInterrupt(3), handleInterrupt2, FALLING);
}
 
void loop() {
}
 
void handleInterrupt1() {
  count++; // 记录按键次数
  Serial.println(count); // 通过串口打印按键次数
}
 
void handleInterrupt2() {
  count2++; // 记录第二个按键次数
  count3++; // 记录第三个按键次数
  int num = count2 * 10 + count3; // 将两个计数器变量组合成一个十进制数
  String binary = String(num, BIN); // 将该数转化为二进制数
  while (binary.length() < 5) { // 将二进制数补齐到 5 位
    binary = "0" + binary;
  }
  digitalWrite(ledPin1, binary.charAt(4) == '1' ? HIGH : LOW); // 控制 LED 1 的状态
  digitalWrite(ledPin2, binary.charAt(3) == '1' ? HIGH : LOW); // 控制 LED 2 的状态
  digitalWrite(ledPin3, binary.charAt(2) == '1' ? HIGH : LOW); // 控制 LED 3 的状态
  digitalWrite(ledPin4, binary.charAt(1) == '1' ? HIGH : LOW); // 控制 LED 4 的状态
  digitalWrite(ledPin5, binary.charAt(0) == '1' ? HIGH : LOW); // 控制 LED 5 的状态
  Serial.println(binary); // 在串口上打印该二进制数
}

该程序中,我们使用了 attachInterrupt() 函数来绑定中断引脚到中断服务函数中。在中断服务函数中,我们记录按键被按下的次数,并且在第二个中断服务函数中,我们将两个计数器变量组合成一个十进制数,并将该数转化为二进制数。然后,我们控制 5 个 LED 的状态,使其对应二进制数的每一个位,并在串口上打印该二进制数


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

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