#include <EEPROM.h>
#include <IRremote.h>
const byte IR_RECEIVE_PIN = 34;
#define EEPROM_SIZE 5
//#define RELAY_1 2
static uint8_t RELAY_1 = 2;
static uint8_t RELAY_2 = 5;
unsigned long last_millis1 = 0;
unsigned long last_millis2 = 0;
unsigned long last_millis3 = 0;
unsigned long debounce_delay = 100;
bool STATE_RELAY_1 = LOW;
bool STATE_RELAY_2 = LOW;
void setup() {
// put your setup code here, to run once
Serial.begin(115200);
EEPROM.begin(EEPROM_SIZE);
IrReceiver.begin(IR_RECEIVE_PIN);
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
digitalWrite(RELAY_1, STATE_RELAY_1);
digitalWrite(RELAY_2, STATE_RELAY_2);
STATE_RELAY_1 = EEPROM.read(0);
STATE_RELAY_2 = EEPROM.read(1);
digitalWrite(RELAY_1, STATE_RELAY_1);
digitalWrite(RELAY_2, STATE_RELAY_2);
Serial.println("Hello, ESP32!");
}
void turnOffAllRelays() {
digitalWrite(STATE_RELAY_1, 1);
digitalWrite(RELAY_1, LOW);
/* Serial.println(STATE_RELAY_1);
bool status = 0;
digitalWrite(RELAY_1, status);
//digitalWrite(RELAY_2, status);
digitalWrite(STATE_RELAY_1, 1);
Serial.println(status);
EEPROM.write(0, status);
// EEPROM.write(1, status);
// add more EEPROM.write() statements for additional relays here
EEPROM.commit();
*/
//control_relay(1, RELAY_1, STATE_RELAY_1);
}
void control_relay(int relay_no, int relay_pin, boolean &status){
status = !status;
digitalWrite(relay_pin, status);
//Serial.println(status);
EEPROM.write(relay_no-1, status);
EEPROM.commit();
String text = (status)? "ON" : "OFF";
Serial.println("Relay"+String(relay_no)+" is "+text);
delay(500);
}
void loop() {
if (IrReceiver.decode()) {
if ((millis() - last_millis1) > debounce_delay) { // if a certain amount of time has passed since the button was pressed
last_millis1 = millis();
switch (IrReceiver.decodedIRData.decodedRawData)
{
//1st
case 0xFD02FF00: //Enter the 'Hex Code' on your remote here
control_relay(1, RELAY_1, STATE_RELAY_1);
delay(100);
break;
//1st
case 0xDD22FF00: //Enter the 'Hex Code' on your remote here
control_relay(2, RELAY_2, STATE_RELAY_2);
delay(100);
break;
case 0x5DA2FF00: //for All OFF
//turnOffAllRelays();
if (STATE_RELAY_1 ==HIGH ) {
control_relay(1, RELAY_1, STATE_RELAY_1);
}
if (STATE_RELAY_2 ==HIGH ) {
control_relay(2, RELAY_2, STATE_RELAY_2);
}
}
}
//Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
IrReceiver.resume();
}
}