#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Dirección I2C y tamaño de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 20, 4); // Ajusta la dirección y el tamaño según tu configuración
const int potPin = 34; // Pin del potenciómetro
const int pirPin = 32; // Pin del sensor PIR
const int ldrPin = 35; // Pin del sensor LDR
const int ledPin = 33; // Pin del LED
void setup() {
// Inicializa la pantalla LCD
lcd.init(); // Ajusta según las dimensiones de tu pantalla LCD
lcd.backlight();
// Inicializa el monitor serial
Serial.begin(115200); // Ajusta la velocidad de baudios si es necesario
// Configuración de los pines
pinMode(potPin, INPUT);
pinMode(pirPin, INPUT);
pinMode(ldrPin, INPUT);
pinMode(ledPin, OUTPUT);
// Mensaje inicial en la pantalla y monitor serial
lcd.setCursor(0, 0);
lcd.print("Iniciando...");
Serial.println("Iniciando...");
}
void loop() {
int potValue = readPotentiometer();
int pirState = readPIR();
float ldrLux = readLDR();
controlLED(potValue, pirState);
updateLCD(potValue, pirState, ldrLux);
logValues(potValue, pirState, ldrLux);
delay(500); // Ajustar el tiempo de actualización según sea necesario
}
// Función para leer el valor del potenciómetro
int readPotentiometer() {
return analogRead(potPin);
}
// Función para leer el estado del sensor PIR
int readPIR() {
return digitalRead(pirPin);
}
// Función para leer el valor del LDR y convertirlo a LUX
float readLDR() {
int ldrValue = analogRead(ldrPin);
return map(ldrValue, 0, 4095, 0, 1000); // Ajustar el rango según tus necesidades
}
// Función para controlar el LED basado en el potenciómetro y el PIR
void controlLED(int potValue, int pirState) {
if (potValue > 1500 || pirState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
// Función para actualizar la pantalla LCD
void updateLCD(int potValue, int pirState, float ldrLux) {
lcd.setCursor(0, 0);
lcd.print("POT: ");
lcd.print(potValue);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("PIR: ");
lcd.print(pirState == HIGH ? "NOVEDADES!!" : "S/N");
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print("FOT: ");
lcd.print(ldrLux);
lcd.print(" ");
lcd.print(" LUX");
}
// Función para registrar los valores en el monitor serial
void logValues(int potValue, int pirState, float ldrLux) {
Serial.print("POT: ");
Serial.print(potValue);
Serial.print(" | PIR: ");
Serial.print(pirState == HIGH ? "NOVEDADES!!" : "S/N");
Serial.print(" | FOT: ");
Serial.print(ldrLux);
Serial.println(" LUX");
}