下面实验如何进行给出详细分析写出程序外部中断与串口通行实验目的:掌握 ARDUINO 的外部中断引脚有哪些串行通行的接口是哪几个引脚 这在硬件层面上的应用很重要。掌握外部中断的触发与回调函数串口通行的启动等。内容:①连接 1 个按键至外部中断引脚 2 上ARDUINO 记录按键次数采用中断方式非查询方式并通过串口打印按键次数;②连接 2 个按键至外部中断引脚 23 上同时自己选取其它的 5 个端口
实验步骤:
-
连接 1 个按键至外部中断引脚 2 上,定义一个计数器变量 count,初始化为 0。
-
在 setup() 函数中,使用 attachInterrupt() 函数将中断引脚 2 绑定到一个中断服务函数中,当按键被按下时,该函数将被调用。
-
在中断服务函数中,每次按键被按下,将计数器变量 count 加 1,然后通过串口打印按键次数。
-
连接 2 个按键至外部中断引脚 2,3 上,同时连接 5 个 LED 到自己选取的 5 个端口上。
-
在 setup() 函数中,使用 attachInterrupt() 函数将中断引脚 2 和 3 绑定到两个不同的中断服务函数中,当按键被按下时,对应的函数将被调用。
-
在两个中断服务函数中,分别记录按键被按下的次数,然后将这两个计数器变量的值组合成一个十进制数,并将该数转化为二进制数。
-
控制 5 个 LED 的状态,使其对应二进制数的每一个位。
-
在串口上打印该二进制数。
代码实现:
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 著作权归作者所有。请勿转载和采集!