// Importar librerías
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Constantes para la fotoresistencia y cálculo de luminosidad
const float GAMMA = 0.7;
const float RL10 = 50;
// Definir Pin de la fotoresistencia y del LED
#define LDR 34
#define LED 4
// Declarar la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 4);
// Declarar variables para los LED
int ledTactil = 14;
// Declarar variable para los botones
int bTactil = 12;
bool state = false;
void setup() {
Serial.begin(115200);
// Modos de pin para los LED
pinMode(ledTactil, OUTPUT);
// Modos de pin para los botones
pinMode(bTactil, INPUT_PULLUP);
// Inicializar el pin de la fotoresistencia y el LED
pinMode(LDR, INPUT);
pinMode(LED, OUTPUT);
// Iniciar pantalla LCD
lcd.backlight();
lcd.init();
}
void loop() {
// Lectura digital del botón táctil
if (digitalRead(bTactil) == LOW && state == false) {
state = true;
digitalWrite(ledTactil, HIGH);
}
if (digitalRead(bTactil) == LOW && state == true) {
state = false;
digitalWrite(ledTactil, LOW);
}
// Leer el valor analógico de la fotoresistencia
int analogValue = analogRead(LDR);
// Calcular voltaje y resistencia
float voltage = analogValue / 4095.0 * 3.3;
float resistance = 2000 * voltage / (1 - voltage / 3.3);
// Calcular los lux
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA)) / 1.8099;
// Mostrar los lux en el monitor serial
Serial.print("Lux: ");
Serial.println(lux);
// Mostrar los lux en la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lux: ");
lcd.print(lux);
// Encender o apagar el LED según el nivel de luminosidad
if (lux > 100) {
digitalWrite(LED, HIGH); // Encender LED
lcd.setCursor(0, 1);
lcd.print("LED Encendido");
} else {
digitalWrite(LED, LOW); // Apagar LED
lcd.setCursor(0, 1);
lcd.print("LED Apagado");
}
// Esperar 1 segundo antes de la siguiente lectura
delay(1000);
}