#include <IRremote.h>
// define the GPIO connected with Relays
#define RelayPin1 2 //D2
#define RelayPin2 3 //D3
#define RelayPin3 4 //D4
#define IR_RECV_PIN A0 //A0
//Update the HEX code of IR Remote 0x<HEX CODE>
#define IR_Button_1 48
#define IR_Button_2 24
#define IR_Button_3 122
#define IR_All_Off 176
#define IR_All_On 104
void relayOnOff(int relay){
switch(relay){
case 1:
digitalWrite(RelayPin1, !digitalRead(RelayPin1)); // change state for relay-1
delay(100);
break;
case 2:
digitalWrite(RelayPin2, !digitalRead(RelayPin2)); // change state for relay-2
delay(100);
break;
case 3:
digitalWrite(RelayPin3, !digitalRead(RelayPin3)); // change state for relay-3
delay(100);
break;
default : break;
}
}
void all_Switch_OFF(){
digitalWrite(RelayPin1, LOW); delay(100);
digitalWrite(RelayPin2, LOW); delay(100);
digitalWrite(RelayPin3, LOW); delay(100);
}
void all_Switch_ON(){
digitalWrite(RelayPin1, HIGH); delay(100);
digitalWrite(RelayPin2, HIGH); delay(100);
digitalWrite(RelayPin3, HIGH); delay(100);
}
void ir_remote(){
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.command);
switch(IrReceiver.decodedIRData.command){
case IR_Button_1: relayOnOff(1); break;
case IR_Button_2: relayOnOff(2); break;
case IR_Button_3: relayOnOff(3); break;
case IR_All_Off: all_Switch_OFF(); break;
case IR_All_On: all_Switch_ON(); break;
default : break;
}
IrReceiver.resume();
}
}
void setup() {
Serial.begin(9600);
IrReceiver.begin(IR_RECV_PIN);// Start the receiver
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
//During Starting all Relays should TURN OFF
digitalWrite(RelayPin1, LOW);
digitalWrite(RelayPin2, LOW);
digitalWrite(RelayPin3, LOW);
delay(500);
}
void loop() {
ir_remote();
}