Power on and off programme with a button on IR remote

I wrote a code where while pressing 0,1,2,3 and 4 button on the IR adequate number of LEDs are turned on

#include <IRremote.h>

int IRpin=3;
IRrecv irrecv(IRpin);
decode_results results;
int LED1= 6;
int LED2= 8;
int LED3= 10;
int LED4= 12;

void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

void loop(){
  if (irrecv.decode(&results)){
    unsigned long read = results.value;
    switch(read)
    {
      case 0xFF6897:
      //Serial.println("0");       // button 0
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
      break;
      case 0xFF30CF:
      //Serial.println("1");        // button 1
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);

      break;
      case 0xFF18E7:   // button 2
      //Serial.println("2");
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);

      break;
      case 0xFF7A85:      // button 3
      //Serial.println("3");
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, LOW);

      break;
      case 0xFF10EF:    // button 4
      //Serial.println("4");
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, HIGH);
      break;

    }
  }
  { Serial.println(results.value,HEX);
  irrecv.resume();
  }
  delay(500);
}

This code is working properly but I have to include that unless button number 8 is pressed the program is not working and if it's pressed again then the whole program stops working and LEDs cannot be turned.( something like in power on/off button in a TV remote). I don't know how to do it because every time I try to include if statement before switch case like below or in another way none of the LED can be turned on. There's probably something missing in that if statement.

#include <IRremote.h>

int IRpin=3;
IRrecv irrecv(IRpin);
decode_results results;
int LED1= 6;
int LED2= 8;
int LED3= 10;
int LED4= 12;


void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

void loop(){
  if (irrecv.decode(&results) ){
    int sensorValue=0;
    sensorValue = digitalRead(LED1);
    sensorValue = digitalRead(LED2);
    sensorValue = digitalRead(LED3);
    sensorValue = digitalRead(LED4);
    unsigned long read = results.value;

    if (read==0xFF4AB5 ){      // if button number 8 is pressed 
    switch(read)
    {  
      case 0xFF6897:
      //Serial.println("0");
      {digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
      break;}
      case 0xFF30CF:
      //Serial.println("1");
      {digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
      break;}
      case 0xFF18E7:
      //Serial.println("2");
      {digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
      break;}
      case 0xFF7A85:
      //Serial.println("3");
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, LOW);

      break;
      case 0xFF10EF:
      //Serial.println("4");
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, HIGH);
      break;

      }}


  { Serial.println(results.value,HEX);
  irrecv.resume();
  }
  delay(500);
}}

sounds like you want the press of button-8 to be an en/disable.

the current code won't work because there's no 2nd read of the ir recvr

one approach is to have 2 sets of switch statements conditionally called depending on a flag. the one switch has a single button-8 case and simply sets the flag. the other case, invoked when the flag is set handles all the buttons include button-8 which causes the flag to be unset

Thanks for your answer! How can I write that unless the first flag (which only includes 8th button) is not true then don't go to second switch case (switching on leds)? Do I have to declare a boolean variable?

unable to compile w/o IRremote library

#include <IRremote.h>

int IRpin=3;
IRrecv irrecv (IRpin);
decode_results results;
int LED1= 6;
int LED2= 8;
int LED3= 10;
int LED4= 12;

#define Button8   0xFF4AB5 
bool enabled;

void loop ()
{
    if (irrecv.decode(&results)) {
        unsigned long read = results.value;

        if (! enabled)  {
            if (Button8 == read)
                enabled = true;
        }
        else  {
            switch (read) {
            case Button8:
                enabled = false;
                break;

            case 0xFF6897:
                //Serial.println ("0");
                digitalWrite (LED1, LOW);
                digitalWrite (LED2, LOW);
                digitalWrite (LED3, LOW);
                digitalWrite (LED4, LOW);
                break;

            case 0xFF30CF:
                //Serial.println ("1");
                digitalWrite (LED1, HIGH);
                digitalWrite (LED2, LOW);
                digitalWrite (LED3, LOW);
                digitalWrite (LED4, LOW);
                break;

            case 0xFF18E7:
                //Serial.println ("2");
                digitalWrite (LED1, HIGH);
                digitalWrite (LED2, HIGH);
                digitalWrite (LED3, LOW);
                digitalWrite (LED4, LOW);
                break;

            case 0xFF7A85:
                //Serial.println ("3");
                digitalWrite (LED1, HIGH);
                digitalWrite (LED2, HIGH);
                digitalWrite (LED3, HIGH);
                digitalWrite (LED4, LOW);
                break;

            case 0xFF10EF:
                //Serial.println ("4");
                digitalWrite (LED1, HIGH);
                digitalWrite (LED2, HIGH);
                digitalWrite (LED3, HIGH);
                digitalWrite (LED4, HIGH);
                break;
            }
        }
        Serial.println (results.value,HEX);
        irrecv.resume ();
    }
}

void setup ()
{
    Serial.begin (9600);
    irrecv.enableIRIn ();
    pinMode (LED1, OUTPUT);
    pinMode (LED2, OUTPUT);
    pinMode (LED3, OUTPUT);
    pinMode (LED4, OUTPUT);
}

It's working, thank you so much!!