/*====================================================================
; "Sensor de temperatura con nivel de batería"
;
; Creado:   lunes 9 de octubre del 2023
; Procesador: ESP32
; Compilador:  Wokwi
; Autor: Ulises Ale
; Descripción: 
; El dispositivo esta diseñando para dar la información producida
; por el sensor DHT22, el nivel de Bateria a travez del led gráfico 
; y el accionar de un Actuador.
; Esquema eléctrico con los respectivos componentes al microcontrolador 
;
;====================================================================*/

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

// Pin para el relé
const int relayPin = 12;

// Pin para el potenciómetro
const int potPin = 34;

// Pins para el LED bar graph
const int ledPins[] = {15, 2, 4, 5, 18, 19, 21, 22, 23, 13};

// Configuración del sensor DHT22
#define DHTPIN 14
#define DHTTYPE DHT22

DHT_Unified dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(relayPin, OUTPUT);
  dht.begin();
  Serial.begin(9600);

  // Configurar los pines del LED bar graph como salidas
  for (int i = 0; i < sizeof(ledPins) / sizeof(ledPins[0]); i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  float temperatura = event.temperature;
  dht.humidity().getEvent(&event);
  float humedad = event.relative_humidity;

  int valorPotenciometro = analogRead(potPin);
  int porcentajePotenciometro = map(valorPotenciometro, 0, 4095, 0, 100); // El ESP32 tiene un ADC de 12 bits

  Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.print(" °C | Humedad: ");
  Serial.print(humedad);
  Serial.print(" % | Potenciómetro: ");
  Serial.print(porcentajePotenciometro);
  Serial.println(" %");

  if (porcentajePotenciometro >= 50) {
    digitalWrite(relayPin, HIGH);
  } else {
    digitalWrite(relayPin, LOW);
  }

  // Control del LED bar graph
  int ledsEncendidos = map(porcentajePotenciometro, 0, 100, 0, sizeof(ledPins) / sizeof(ledPins[0]));
  for (int i = 0; i < sizeof(ledPins) / sizeof(ledPins[0]); i++) {
    if (i < ledsEncendidos) {
      digitalWrite(ledPins[i], HIGH);
    } else {
      digitalWrite(ledPins[i], LOW);
    }
  }

  delay(1000);
}
NOCOMNCVCCGNDINLED1PWRRelay Module