#include <IRremote.h>
#define PIN_RECEIVER 2 // Signal Pin of IR receiver
// Define relay control pins
#define RELAY_1_PIN 2
#define RELAY_2_PIN 4
#define RELAY_3_PIN 15
#define RELAY_4_PIN 18
#define STATUS_LED 13 // Built-in LED on most ESP32 boards
IRrecv receiver(PIN_RECEIVER);
void setup()
{
// Initialize relay control pins
pinMode(RELAY_1_PIN, OUTPUT);
pinMode(RELAY_2_PIN, OUTPUT);
pinMode(RELAY_3_PIN, OUTPUT);
pinMode(RELAY_4_PIN, OUTPUT);
pinMode(STATUS_LED, OUTPUT);
receiver.enableIRIn(); // Start the receiver
}
void loop()
{
// Checks received an IR signal
if (receiver.decode()) {
translateIR();
receiver.resume(); // Receive the next value
}
}
void toggleRelay(int relayPin)
{
// Toggle the state of the relay
if (digitalRead(relayPin) == HIGH) {
digitalWrite(relayPin, LOW);
} else {
digitalWrite(relayPin, HIGH);
}
}
void indicateStatus()
{
// Blink the built-in LED to indicate the status
digitalWrite(STATUS_LED, HIGH);
delay(100);
digitalWrite(STATUS_LED, LOW);
}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 48: // Example IR code, replace with your remote's code
toggleRelay(RELAY_1_PIN);
indicateStatus();
break;
case 24: // Example IR code, replace with your remote's code
toggleRelay(RELAY_2_PIN);
indicateStatus();
break;
case 122: // Example IR code, replace with your remote's code
toggleRelay(RELAY_3_PIN);
indicateStatus();
break;
case 16: // Example IR code, replace with your remote's code
toggleRelay(RELAY_4_PIN);
indicateStatus();
break;
// Add more cases for other buttons if needed
}
}