// First include the header file
#include <IRremote.h> // include the library
// Define the IRrecv Pin
#define Remote_RECEIVER 2 // Signal Pin of IR receiver
uint16_t Relay[4] ={32, 33, 25, 26}; // Create an array that holds the number GPIOs connected to the relay
bool Relay_state[4]; // Each relay's state
#define size sizeof(Relay)/sizeof(Relay[4]) // Define the size of the array
IRrecv Remote(Remote_RECEIVER); // Instantiate an IRrecv Object
void setup() {
// put your setup code here, to run once:
Remote.enableIRIn(); // Start the receiver // Enable the IRIN Pin
pinMode(Relay[0], OUTPUT);
for(int i= 0; i<=size; i++)
{/* Set all of the GPIOs connected to the relays to OUTPUT MODE */
pinMode(Relay[i], OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
if (Remote.decode()) { //Decode the the data if there is.
/* Command 1 */
if((Remote.decodedIRData.command)==48)
{
if(Relay_state[0])
{
Relay_state[0] =!Relay_state[0];
digitalWrite(Relay[0], Relay_state[0]);
}
else
{
Relay_state[0] =!Relay_state[0];
digitalWrite(Relay[0], Relay_state[0]);
}
}
/* Command 2 */
if((Remote.decodedIRData.command)==24)
{
if(Relay_state[1])
{
Relay_state[1] =!Relay_state[1];
digitalWrite(Relay[1], Relay_state[1]);
}
else
{
Relay_state[1] =!Relay_state[1];
digitalWrite(Relay[1], Relay_state[1]);
}
}
/* Command 3 */
if((Remote.decodedIRData.command)==122)
{
if(Relay_state[2])
{
Relay_state[2] =!Relay_state[2];
digitalWrite(Relay[2], Relay_state[2]);
}
else
{
Relay_state[2] =!Relay_state[2];
digitalWrite(Relay[2], Relay_state[2]);
}
}
/* Command 4 */
if((Remote.decodedIRData.command)==16)
{
if(Relay_state[3])
{
Relay_state[3] =!Relay_state[3];
digitalWrite(Relay[3], Relay_state[3]);
}
else
{
Relay_state[3] =!Relay_state[3];
digitalWrite(Relay[3], Relay_state[3]);
}
}
/* All relays */
if((Remote.decodedIRData.command)==162)
{
for(int i =0; i<=size; i++)
{
if(!Relay_state[i])
{
Relay_state[i] =!Relay_state[i];
digitalWrite(Relay[i], Relay_state[i]);
}
else
{
Relay_state[i] =!Relay_state[i];
digitalWrite(Relay[i], Relay_state[i]);
}
}
}
/* Resume the receiver */
Remote.resume(); // Receive the next value
}
}
// void Reset_fun()
// { /* This function resets all the relay state to their default states. */
// for(int i= 0; i<=size; i++)
// {
// Relay_state[i] = false;
// }
// }