#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configuración del LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int redPin = 11; // Pin del color rojo del LED RGB
const int greenPin = 10; // Pin del color verde del LED RGB
const int bluePin = 9; // Pin del color azul del LED RGB
const int buttonRedPin = 2; // Pin del botón para el rojo
const int buttonGreenPin = 3; // Pin del botón para el verde
const int buttonBluePin = 4; // Pin del botón para el azul
const int buttonDecPin = 5; // Pin del botón para decrementar
int redValue = 0; // Valor inicial para el color rojo
int greenValue = 0; // Valor inicial para el color verde
int blueValue = 0; // Valor inicial para el color azul
bool lastRedButtonState = LOW;
bool lastGreenButtonState = LOW;
bool lastBlueButtonState = LOW;
bool lastDecButtonState = LOW;
void setup() {
// Inicializar LCD
lcd.init();
lcd.backlight();
// Configurar pines
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buttonRedPin, INPUT);
pinMode(buttonGreenPin, INPUT);
pinMode(buttonBluePin, INPUT);
pinMode(buttonDecPin, INPUT);
// Inicializar LED RGB apagado
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
// Mostrar valores iniciales
mostrarValoresRGB();
}
void loop() {
bool buttonRedState = digitalRead(buttonRedPin);
bool buttonGreenState = digitalRead(buttonGreenPin);
bool buttonBlueState = digitalRead(buttonBluePin);
bool buttonDecState = digitalRead(buttonDecPin);
// Verificar si el botón rojo ha sido presionado
if (buttonRedState == HIGH && lastRedButtonState == LOW) {
redValue = min(255, redValue + 5);
lcd.setCursor(0, 1);
lcd.print("Rojo: +5 ");
delay(200);
}
lastRedButtonState = buttonRedState;
// Verificar si el botón verde ha sido presionado
if (buttonGreenState == HIGH && lastGreenButtonState == LOW) {
greenValue = min(255, greenValue + 5);
lcd.setCursor(0, 1);
lcd.print("Verde: +5 ");
delay(200);
}
lastGreenButtonState = buttonGreenState;
// Verificar si el botón azul ha sido presionado
if (buttonBlueState == HIGH && lastBlueButtonState == LOW) {
blueValue = min(255, blueValue + 5);
lcd.setCursor(0, 1);
lcd.print("Azul: +5 ");
delay(200);
}
lastBlueButtonState = buttonBlueState;
// Verificar si el botón de decremento ha sido presionado
if (buttonDecState == HIGH && lastDecButtonState == LOW) {
redValue = max(0, redValue - 5);
greenValue = max(0, greenValue - 5);
blueValue = max(0, blueValue - 5);
lcd.setCursor(0, 1);
lcd.print("Decremento ");
delay(200);
}
lastDecButtonState = buttonDecState;
// Actualizar el LED RGB con los nuevos valores
analogWrite(redPin, redValue);
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
// Mostrar valores RGB en hexadecimal
mostrarValoresRGB();
}
void mostrarValoresRGB() {
lcd.setCursor(0, 0);
lcd.print("RGB: ");
lcd.print(redValue, HEX);
lcd.print(greenValue, HEX);
lcd.print(blueValue, HEX);
}