#include <IRremote.hpp>
const int relayPin = 15;
const int irPin = 16;
const int redPin = 18;
const int greenPin = 19;
const int bluePin = 20;
IRrecv irrecv(irPin);
decode_results results;
bool isOn = false;
int brightness = 255;
int currentColor = 0;
void setup() {
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
irrecv.enableIRIn();
Serial.begin(9600);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned long code = results.value;
long powerCode = 0xFFA25D;
long colorChangeCode = 0xFF629D;
long increaseBrightnessCode = 0xFFE21D;
long decreaseBrightnessCode = 0xFF22DD;
if (code == powerCode)
{
isOn = !isOn;
digitalWrite(relayPin, isOn);
}
}
else if (code == colorChangeCode && isOn)
{
currentColor = (currentColor + 1) % 3;
updateLED();
}
else if (code == increaseBrightnessCode && isOn)
{
brightness = min(255, brightness + 51);
updateLED();
}
else if (code == decreaseBrightnessCode && isOn)
{
brightness = max(0, brightness - 51);
updateLED();
}
irrecv.resume();
}
}
void updateLED() {
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
if (currentColor == 0)
{
analogWrite(redPin, brightness);
} else if (currentColor == 1)
{
analogWrite(greenPin, brightness);
} else if (currentColor == 2)
{
analogWrite(bluePin, brightness);
}
}