// #inlcude "PinChangeInterrupt.h"
#include <PinChangeInterrupt.h>
const int buttonPin1 = 2; // Pin del primer botón
const int buttonPin2 = 3; // Pin del segundo botón
const int buttonPin3 = 4; // Pin del tercer botón
const int buttonPin4 = 5; // Pin del cuarto botón
volatile int buttonState1 = 0; // Estado del primer botón
volatile int buttonState2 = 0; // Estado del segundo botón
volatile int buttonState3 = 0; // Estado del tercer botón
volatile int buttonState4 = 0; // Estado del cuarto botón
#define DELAY_BTN 500 // 500ms
int i = 0;
int btnPress = 0;
long lastTime = 0;
void setup() {
Serial.begin(115200);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
// // Hardware Interrupts just Pin 2 and Pin 3
// attachInterrupt(digitalPinToInterrupt(buttonPin1), buttonISR, RISING);
// attachInterrupt(digitalPinToInterrupt(buttonPin2), buttonISR, RISING);
// attachInterrupt(digitalPinToInterrupt(buttonPin3), buttonISR, RISING);
// attachInterrupt(digitalPinToInterrupt(buttonPin4), buttonISR, RISING);
// Pin change Interriupts Any Pin
attachPCINT(digitalPinToPCINT(buttonPin1), pinisr, FALLING);
attachPCINT(digitalPinToPCINT(buttonPin2), pinisr, FALLING);
attachPCINT(digitalPinToPCINT(buttonPin3), pinisr, FALLING);
attachPCINT(digitalPinToPCINT(buttonPin4), pinisr, FALLING);
}
void loop() {
// Tu código principal va aquí
// Serial.println(btnPress);
if (btnPress)
{
if (millis()-lastTime > DELAY_BTN)
{
Serial.print("¡Interrupción ");
Serial.print(btnPress);
Serial.println("!");
lastTime = millis();
}
btnPress = 0;
}
Serial.println(i);
i++;
delay(200);
}
void pinisr() {
if (!digitalRead(buttonPin1)) btnPress = 1;
else if (!digitalRead(buttonPin2)) btnPress = 2;
else if (!digitalRead(buttonPin3)) btnPress = 3;
else if (!digitalRead(buttonPin4)) btnPress = 4;
else btnPress = 0;
}
void buttonISR() {
if (!digitalRead(buttonPin1)) btnPress = 1;
else if (!digitalRead(buttonPin2)) btnPress = 2;
else if (!digitalRead(buttonPin3)) btnPress = 3;
else if (!digitalRead(buttonPin4)) btnPress = 4;
else btnPress = 0;
Serial.println(btnPress);
}