/************************************
TITLE:
SUBMITTED BY: ALVARO JR. DANILO E..
SUBMITTED TO: PROF. MICHAEL T. SAMONTE
************************************/
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,4);
IRrecv IR(2);
int ledPin = 19;
int ledPin1 = 18;
int ledPin2 = 5;
int ledPin3 = 17;
String led_status = "LOW";
String led1_status = "LOW";
String led2_status = "LOW";
String led3_status = "LOW";
#define BUTTON1_PIN 13 // pin for Button 1
#define BUTTON2_PIN 12 // pin for Button 2
#define BUTTON3_PIN 14 // pin for Button 3
#define BUTTON4_PIN 27 // pin for Button 4
void setup() {
IR.enableIRIn();
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT); // Set the LED pin as OUTPUT
digitalWrite(ledPin, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
pinMode(BUTTON3_PIN, INPUT_PULLUP);
pinMode(BUTTON4_PIN, INPUT_PULLUP);
}
void loop() {
static boolean ledStates[] = {false, false, false, false};
if (IR.decode()) {
Serial.println(IR.decodedIRData.decodedRawData, HEX);
// Use the correct IR codes from your remote control
if (IR.decodedIRData.decodedRawData == 0xCF30FF00) {
if(digitalRead(ledPin)== HIGH){
digitalWrite(ledPin, LOW);
lcd.setCursor(8,0);
lcd.print(" ");
led_status = "LOW";
ledStates[0] = HIGH;
}
else if (digitalRead(ledPin)== LOW){
digitalWrite(ledPin, HIGH);
led_status = "HIGH";
ledStates[0] = LOW;
}
}
if (IR.decodedIRData.decodedRawData == 0xE718FF00) {
if(digitalRead(ledPin1)== HIGH){
digitalWrite(ledPin1, LOW);
lcd.setCursor(8,1);
lcd.print(" ");
led1_status = "LOW";
ledStates[1]=HIGH;
}
else if (digitalRead(ledPin1)== LOW){
digitalWrite(ledPin1, HIGH);
led1_status = "HIGH";
ledStates[1] = LOW;
}
}
if (IR.decodedIRData.decodedRawData == 0x857AFF00) {
if(digitalRead(ledPin2)== HIGH){
digitalWrite(ledPin2, LOW);
lcd.setCursor(8,2);
lcd.print(" ");
led2_status = "LOW";
ledStates[2] = HIGH;
}
else if (digitalRead(ledPin2)== LOW){
digitalWrite(ledPin2, HIGH);
led2_status = "HIGH";
ledStates[2] = LOW;
}
}
if (IR.decodedIRData.decodedRawData == 0xB54AFF00) {
if(digitalRead(ledPin3)== HIGH){
digitalWrite(ledPin3, LOW);
lcd.setCursor(8,3);
lcd.print(" ");
led3_status = "LOW";
ledStates[3] = HIGH;
}
else if (digitalRead(ledPin3)== LOW){
digitalWrite(ledPin3, HIGH);
led3_status = "HIGH";
ledStates[3] = LOW;
}
}
updateButtonState(BUTTON1_PIN, ledStates[0], ledPin);
updateButtonState(BUTTON2_PIN, ledStates[1], ledPin1);
updateButtonState(BUTTON3_PIN, ledStates[2], ledPin2);
updateButtonState(BUTTON4_PIN, ledStates[3], ledPin3);
IR.resume();
}
lcd.setCursor(0,0);
lcd.print("LED1:");
lcd.print(led_status);
lcd.setCursor(0,1);
lcd.print("LED2:");
lcd.print(led1_status);
lcd.setCursor(0,2);
lcd.print("LED3:");
lcd.print(led2_status);
lcd.setCursor(0,3);
lcd.print("LED4:");
lcd.print(led3_status);
lcd.setCursor(10,0);
lcd.print("CREATED BY:");
lcd.setCursor(10,1);
lcd.print("DANILO");
lcd.setCursor(10,2);
lcd.print("ALVARO");
}
void updateButtonState(int buttonPin, boolean &ledState, int relayPin) {
if (digitalRead(buttonPin) == LOW) {
ledState = !ledState;
digitalWrite(relayPin, ledState ? HIGH : LOW);
delay(250); // Button debounce delay
}
}