#include <SoftwareSerial.h>

#define INTERRUPT_PIN_2 2 #define INTERRUPT_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 count2 = 0; // 记录按键2的次数 volatile int count3 = 0; // 记录按键3的次数

SoftwareSerial mySerial(10, 11); // 软串口

void setup() { pinMode(INTERRUPT_PIN_2, INPUT_PULLUP); pinMode(INTERRUPT_PIN_3, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN_2), button2Interrupt, FALLING); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN_3), button3Interrupt, FALLING); 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); mySerial.begin(9600); }

void loop() { // 无需执行任何操作,所有的操作都在中断函数中完成 }

void button2Interrupt() { count2++; printCount(); }

void button3Interrupt() { count3++; printCount(); }

void printCount() { int decimal = count2 * 10 + count3; int binary = decimalToBinary(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)); mySerial.println(binary); }

int decimalToBinary(int decimal) { int binary = 0; int base = 1; while (decimal > 0) { int digit = decimal % 2; decimal /= 2; binary += digit * base; base *= 10; } return binary; }

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

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

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