I experimenting with the interrupt ISR using Arduino Uno. In my circuit, I am taking two switches which are connected with Uno's interrupt pins, pins 2 and 3, and also taking multiple LEDs which are connected with other pins.
My logic is when I press switch1 (which is connected to pin 3) LEDs should be turned on by the interrupt service routine and when I press switch2 (which is connected to pin 2) LEDs should be turned off by the interrupt service routine.
My problem is that when I pressed switch1 LEDs are turned on but when I pressed switch2 LEDs are not turned off.
Here's my code:
int switch1 = 3;
int switch2 = 2;
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int led5 = 9;
int led6 = 8;
int led7 = 7;
volatile bool flag1 = false;
volatile bool flag2 = false;
//volatile byte state = LOW;
void setup()
{
pinMode(switch1, INPUT_PULLUP);
pinMode(switch2, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
attachInterrupt(digitalPinToInterrupt(switch1), &setFlag1, CHANGE);
attachInterrupt(digitalPinToInterrupt(switch2), &setFlag2, CHANGE);
}
void loop()
{
if (flag1)
{
off();
}
if (flag2)
{
blink1();
}
}
void blink1()
{
attachInterrupt(digitalPinToInterrupt(switch2), setFlag2, CHANGE);
digitalWrite(led1, HIGH);
blink2();
}
void blink2()
{
digitalWrite(led2, HIGH);
blink3();
}
void blink3()
{
digitalWrite(led3, HIGH);
blink4();
}
void blink4()
{
digitalWrite(led4, HIGH);
blink5();
}
void blink5()
{
while (1)
{
digitalWrite(led5, HIGH);
delay(10);
digitalWrite(led5, LOW);
delay(10);
}
}
void off()
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
attachInterrupt(digitalPinToInterrupt(switch1), setFlag1, CHANGE);
}
void setFlag1()
{
detachInterrupt(digitalPinToInterrupt(switch1));
flag1 = true;
}
void setFlag2()
{
detachInterrupt(digitalPinToInterrupt(switch2));
flag2 = true;
}
while(1)does? 2) Why are you detaching and attaching interrupts all the time?blink5function. What is the purpose of an infinite loop in it?