I am using Adafruit Feather M0 Radio with RFM69 Packet Radio and Adafruit 8x16 LED Matrix FeatherWing.
and I woult like to use 8 interrupts for handling Buttons. Unfortunately only 6 interrupts are working. Maybe someone can explain me why?
Code: Select all
#define BtnA A4 // Button_A
#define BtnB 11 // Button_B
#define BtnC A3 // Button_C
#define BtnD 10 // Button_D
#define BtnE A2 // Button_E
#define BtnF 9 // Button_F
#define BtnG 12 // Button_G
#define BtnH 5 // Button_H
volatile unsigned long timerBtnApressed=0; //Timebase for Button-Debouncing
volatile unsigned long timerBtnBpressed=0;
volatile unsigned long timerBtnCpressed=0;
volatile unsigned long timerBtnDpressed=0;
volatile unsigned long timerBtnEpressed=0;
volatile unsigned long timerBtnFpressed=0;
volatile unsigned long timerBtnGpressed=0;
volatile unsigned long timerBtnHpressed=0;
volatile bool flagBtnA = false;
volatile bool flagBtnB = false;
volatile bool flagBtnC = false;
volatile bool flagBtnD = false;
volatile bool flagBtnE = false;
volatile bool flagBtnF = false;
volatile bool flagBtnG = false;
volatile bool flagBtnH = false;
void setup()
{
Serial.begin(9600);
Serial.println("ONLY FOR DEBUGGING");
pinMode(BtnA, INPUT_PULLUP);
pinMode(BtnB, INPUT_PULLUP);
pinMode(BtnC, INPUT_PULLUP);
pinMode(BtnD, INPUT_PULLUP);
pinMode(BtnE, INPUT_PULLUP);
pinMode(BtnF, INPUT_PULLUP);
pinMode(BtnG, INPUT_PULLUP);
pinMode(BtnH, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BtnA), Button_A_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnB), Button_B_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnC), Button_C_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnD), Button_D_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnE), Button_E_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnF), Button_F_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnG), Button_G_pressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(BtnH), Button_H_pressedISR, CHANGE);
}
void loop() //Endloss-Loop
{
if(flagBtnA)
{
flagBtnA=false;
Serial.println("Button A");
}
if(flagBtnB)
{
flagBtnB=false;
Serial.println("Button B");
}
if(flagBtnC)
{
flagBtnC=false;
Serial.println("Button C");
}
if(flagBtnD)
{
flagBtnD=false;
Serial.println("Button D");
}
if(flagBtnE)
{
flagBtnE=false;
Serial.println("Button E");
}
if(flagBtnF)
{
flagBtnF=false;
Serial.println("Button F");
}
if(flagBtnG)
{
flagBtnG=false;
Serial.println("Button G");
}
if(flagBtnH)
{
flagBtnH=false;
Serial.println("Button H");
}
}
void Button_A_pressedISR()
{ if((millis() - timerBtnApressed) > 400) //Button debouncing
{ timerBtnApressed = millis();
flagBtnA=true;
} }
void Button_B_pressedISR()
{ if((millis() - timerBtnBpressed) > 400)
{ timerBtnBpressed = millis();
flagBtnB=true;
} }
void Button_C_pressedISR()
{ if((millis() - timerBtnCpressed) > 400)
{ timerBtnCpressed = millis();
flagBtnC=true;
} }
void Button_D_pressedISR()
{ if((millis() - timerBtnDpressed) > 400)
{ timerBtnDpressed = millis();
flagBtnD=true;
} }
void Button_E_pressedISR()
{ if((millis() - timerBtnEpressed) > 400)
{ timerBtnEpressed = millis();
flagBtnE=true;
} }
void Button_F_pressedISR()
{ if((millis() - timerBtnFpressed) > 400)
{ timerBtnFpressed = millis();
flagBtnF=true;
} }
void Button_G_pressedISR()
{ if((millis() - timerBtnGpressed) > 400)
{ timerBtnGpressed = millis();
flagBtnG=true;
} }
void Button_H_pressedISR()
{ if((millis() - timerBtnHpressed) > 400)
{ timerBtnHpressed = millis();
flagBtnH=true;
} }