IR Controlled LED Effects

Hi friends ,

i am new to the arduino and tried to solve the code myself but i am stuck at this point .

so what i want to do in this project is to control 6 Pinouts ( Lets say LEDS) from IR remote and to add some effects like i did below in my code . but the problem i am facing is when i press the code the effect just work once , how to make it loop until i press next button

#include <Arduino.h>
#include <IRremote.hpp>

const int IR_RECEIVE_PIN = 9;

int de=50; 
int L1 = 3;
int L2 = 4;
int L3 = 5;
int L4 = 6;
int L5 = 7;
int L6 = 8; 

void setup()
{
 Serial.begin(9600);
 IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver
 
 pinMode(L1, OUTPUT);
 pinMode(L2, OUTPUT);
 pinMode(L3, OUTPUT);
 pinMode(L4, OUTPUT);
 pinMode(L5, OUTPUT);
 pinMode(L6, OUTPUT);
 
}

void loop(){
 if (IrReceiver.decode()) 
 {
   Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
   IrReceiver.printIRResultShort(&Serial);

   switch(IrReceiver.decodedIRData.decodedRawData)
   {
     case 0x23DCFD01: 
       Serial.println("EFFECT 1");
       
digitalWrite(L1,1); 
digitalWrite(L2,0); 
digitalWrite(L3,0); 
digitalWrite(L4,0); 
digitalWrite(L5,0); 
digitalWrite(L6,0); 
 //1
 delay(de);  
 
digitalWrite(L1,0); 
digitalWrite(L2,1); 
digitalWrite(L3,0); 
digitalWrite(L4,0); 
digitalWrite(L5,0); 
digitalWrite(L6,0); 
 //2
 delay(de); 
 
digitalWrite(L1,0); 
digitalWrite(L2,0); 
digitalWrite(L3,1); 
digitalWrite(L4,0); 
digitalWrite(L5,0); 
digitalWrite(L6,0); 
 //3
 delay(de); 
 
digitalWrite(L1,0); 
digitalWrite(L2,0); 
digitalWrite(L3,0); 
digitalWrite(L4,1); 
digitalWrite(L5,0); 
digitalWrite(L6,0); 
 //4
 delay(de); 
 
digitalWrite(L1,0); 
digitalWrite(L2,0); 
digitalWrite(L3,0); 
digitalWrite(L4,0); 
digitalWrite(L5,1); 
digitalWrite(L6,0); 
 //5
 delay(de); 
 
digitalWrite(L1,0); 
digitalWrite(L2,0); 
digitalWrite(L3,0); 
digitalWrite(L4,0); 
digitalWrite(L5,0); 
digitalWrite(L6,1); 
 //6
 delay(de); 

 case 0x6D92FD01:"
       Serial.println("TURN OFF ALL LEDS");
digitalWrite(L1,0); 
digitalWrite(L2,0); 
digitalWrite(L3,0); 
digitalWrite(L4,0); 
digitalWrite(L5,0); 
digitalWrite(L6,0); 
       
 
       delay(2000);
     
      break;
     default:
       break;
   }

   IrReceiver.resume(); // Enable receiving of the next value
 }
}

thanks in advance for your help

#include <Arduino.h>
#include <IRremote.hpp>

const int IR_RECEIVE_PIN = 9;

const int de = 50;
const int L1 = 3;
const int L2 = 4;
const int L3 = 5;
const int L4 = 6;
const int L5 = 7;
const int L6 = 8;

void setup()
{
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver

  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(L6, OUTPUT);

}

void loop() {
  static uint32_t Effect = 0;
  if (IrReceiver.decode())
  {
    Effect = IrReceiver.decodedIRData.decodedRawData ;
    Serial.println(Effect, HEX);
    IrReceiver.resume(); // Enable receiving of the next value
  }
  switch (Effect)
  {
    case 0x23DCFD01:
      Serial.println("EFFECT 1");

      digitalWrite(L1, 1);
      digitalWrite(L2, 0);
      digitalWrite(L3, 0);
      digitalWrite(L4, 0);
      digitalWrite(L5, 0);
      digitalWrite(L6, 0);
      //1
      delay(de);

      digitalWrite(L1, 0);
      digitalWrite(L2, 1);
      digitalWrite(L3, 0);
      digitalWrite(L4, 0);
      digitalWrite(L5, 0);
      digitalWrite(L6, 0);
      //2
      delay(de);

      digitalWrite(L1, 0);
      digitalWrite(L2, 0);
      digitalWrite(L3, 1);
      digitalWrite(L4, 0);
      digitalWrite(L5, 0);
      digitalWrite(L6, 0);
      //3
      delay(de);

      digitalWrite(L1, 0);
      digitalWrite(L2, 0);
      digitalWrite(L3, 0);
      digitalWrite(L4, 1);
      digitalWrite(L5, 0);
      digitalWrite(L6, 0);
      //4
      delay(de);

      digitalWrite(L1, 0);
      digitalWrite(L2, 0);
      digitalWrite(L3, 0);
      digitalWrite(L4, 0);
      digitalWrite(L5, 1);
      digitalWrite(L6, 0);
      //5
      delay(de);

      digitalWrite(L1, 0);
      digitalWrite(L2, 0);
      digitalWrite(L3, 0);
      digitalWrite(L4, 0);
      digitalWrite(L5, 0);
      digitalWrite(L6, 1);
      //6
      delay(de);
      break;

    case 0x6D92FD01:
      Serial.println("TURN OFF ALL LEDS");
      digitalWrite(L1, 0);
      digitalWrite(L2, 0);
      digitalWrite(L3, 0);
      digitalWrite(L4, 0);
      digitalWrite(L5, 0);
      digitalWrite(L6, 0);
      delay(2000);

      break;
    default:
      break;
  }
}
1 Like

hey thanks for reply but , it is still not working ,

when i press the button , it just blink for once and then it dont

can't be. show serial port output.

you mean from serial monitor ? here it is

18:42:21.231 -> 23DCFD01
18:42:21.231 -> Protocol=NEC Address=0xFD01 Command=0xDC Raw-Data=0x23DCFD01 32 bits LSB first
18:42:21.325 -> EFFECT 1
18:42:21.559 -> TURN OFF ALL LEDS
18:42:23.562 -> 0
18:42:23.562 -> Protocol=NEC Address=0xFD01 Command=0xDC Repeat gap=38900us

2 seconds? too short.

try that sketch now.

1 Like

still the same :

20:11:07.512 -> 23DCFD01
20:11:07.512 -> EFFECT 1
20:11:07.794 -> 0

the effect is not repeating

#include <Arduino.h>
#include <IRremote.hpp>

const int IR_RECEIVE_PIN = 9;

const int de = 50;
const int Led[6] = {3, 4, 5, 6, 7, 8};

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver
  for (uint8_t i = 0; i < 6; i++)pinMode(Led[i], OUTPUT);
}

void loop() {
  static uint32_t Code = 0;
  static uint8_t Effect = 0;

  if (IrReceiver.decode())  {
    Code = IrReceiver.decodedIRData.decodedRawData ;
    Serial.println(Effect, HEX);
    switch (Code)  {
      case 0x23DCFD01:
        Serial.println("EFFECT 1");
        Effect = 1;
        break;

      case 0x6D92FD01:
        Serial.println("TURN OFF ALL LEDS");
        Effect = 2;
        break;
      default:
        break;
        IrReceiver.resume(); // Enable receiving of the next value
    }
  }
  switch (Effect)    {
    case 1:
      for (uint8_t i = 0; i < 6; i++)digitalWrite(Led[i], 0);
      digitalWrite(Led[0], 1);//1
      delay(de);

      digitalWrite(Led[0], 0);
      digitalWrite(Led[1], 1);//2
      delay(de);

      digitalWrite(Led[1], 0);
      digitalWrite(Led[2], 1);//3
      delay(de);

      digitalWrite(Led[2], 0);
      digitalWrite(Led[3], 1);//4
      delay(de);

      digitalWrite(Led[3], 0);
      digitalWrite(Led[4], 1);//5
      delay(de);

      digitalWrite(Led[4], 0);
      digitalWrite(Led[5], 1);//6
      delay(de);
      break;

    case 2:
      for (uint8_t i = 0; i < 6; i++)digitalWrite(Led[i], 0);
      break;
  }
}
1 Like

Thank you so much bro.had to change the ir rec resume position but It works perfectly now . Wish i could help you back in some way.

And Thanks again for your time :heart:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.