Skip to main content
added 1 character in body
Source Link
Prayuktibid
  • 362
  • 1
  • 5
  • 18

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;
}

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;
}

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;
}
Format code, fix typos, use correctly spelled tag
Source Link
per1234
  • 4.3k
  • 2
  • 24
  • 44

Problem on multiple interrupts operation on arduino unoArduino Uno

I am doing an experiment on Arduinu's Interruptexperimenting with the interrupt ISR overusing Arduino unoUno. IIn my circuit I am taking two switchsswitches which are connected with Uno's Interruptinterrupt pins those are Pin, pins 2 & Pinand 3, and also taking multiple LEDs which are connected with others Pinsother pins. My

My logic is when I pressedpress switch1 (which is connected Pin3 of UNoto pin 3) LedsLEDs should glowbe turned on by the interrupt service routine and when I pressedpress switch2  (which is connected Pin2 of UNoto pin 2) LedsLEDs should OFFbe turned off by the interrupt service routine. My Problem

My problem is that when I pressed switch 1switch1 LEDs are GLOWINgturned on but when I pressed switch2 LEDs are not going to OFFturned off.

HereHere'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;
}

I am tried of this, please help me how can I successfully implement my logic.

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;
}

Problem on multiple interrupts operation on arduino uno

I am doing an experiment on Arduinu's Interrupt ISR over Arduino uno. I my circuit I am taking two switchs which are connected with Uno's Interrupt pins those are Pin 2 & Pin 3 and also taking multiple LEDs which are connected with others Pins. My logic is when I pressed switch1 (which is connected Pin3 of UNo) Leds should glow by interrupt service routine and when I pressed switch2(which is connected Pin2 of UNo) Leds should OFF by interrupt service routine. My Problem is that when I pressed switch 1 LEDs are GLOWINg but when I pressed switch2 LEDs are not going to OFF.

Here 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;
}

I am tried of this, please help me how can I successfully implement my logic.

Problem on multiple interrupts operation on Arduino Uno

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;
}
deleted 1 character in body
Source Link
Prayuktibid
  • 362
  • 1
  • 5
  • 18

I am doing an experiment on Arduinu's Interrupt ISR over Arduino uno. I my circuit I am taking two switchs which are connected with Uno's Interrupt pins those are Pin 2 & Pin 3 and also taking multiple LEDs which are connected with others Pins. My logic is when I pressed switch1 (which is connected Pin3 of UNo) Leds should glow by interrupt service routine and when I pressed switch2(which is connected Pin2 of UNo) Leds should OFF by interrupt service routine. My Problem is that when I pressed switch 1 LEDs are GLOWINg but when I pressed switch2 LEDs are not going to stopOFF.

Here 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;
}

I am tried of this, please help me how can I successfully implement my logic.

I am doing an experiment on Arduinu's Interrupt ISR over Arduino uno. I my circuit I am taking two switchs which are connected with Uno's Interrupt pins those are Pin 2 & Pin 3 and also taking multiple LEDs which are connected with others Pins. My logic is when I pressed switch1 (which is connected Pin3 of UNo) Leds should glow by interrupt service routine and when I pressed switch2(which is connected Pin2 of UNo) Leds should OFF by interrupt service routine. My Problem is that when I pressed switch 1 LEDs are GLOWINg but when I pressed switch2 LEDs are not going to stop.

Here 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;
}

I am tried of this, please help me how can I successfully implement my logic.

I am doing an experiment on Arduinu's Interrupt ISR over Arduino uno. I my circuit I am taking two switchs which are connected with Uno's Interrupt pins those are Pin 2 & Pin 3 and also taking multiple LEDs which are connected with others Pins. My logic is when I pressed switch1 (which is connected Pin3 of UNo) Leds should glow by interrupt service routine and when I pressed switch2(which is connected Pin2 of UNo) Leds should OFF by interrupt service routine. My Problem is that when I pressed switch 1 LEDs are GLOWINg but when I pressed switch2 LEDs are not going to OFF.

Here 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;
}

I am tried of this, please help me how can I successfully implement my logic.

Source Link
Prayuktibid
  • 362
  • 1
  • 5
  • 18
Loading