#include <Wire.h> //libreria comunicacion I2C
#include <Adafruit_GFX.h> //libreria graficos
#include <Adafruit_SSD1306.h> //libraria displays OLED
#include <Adafruit_Sensor.h> //libreria sensores 
#include <DHT.h> //libreria especializada en DHTs

#define SCREEN_WIDTH 128 // Ancho en pixeles del display OLED
#define SCREEN_HEIGHT 64 // Altura en pixeles del display OLED

// Declaración para una pantalla SSD1306 conectada a I2C (pines SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define DHTPIN 14     // Pin digital conectado al sensor DHT
#define DHTTYPE DHT22  // Sensor usado DHT 22

DHT dht(DHTPIN, DHTTYPE); //Declaracion objeto DHT con lo anterior.

void setup() {
  Serial.begin(115200);

  dht.begin(); //inicializacion del sensor
  
  //inicializacion del display OLED
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000); //configuracion texto 
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  delay(5000);

  //Lectura de temperatura y humedad
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(h) || isnan(t)) { //en caso de que no obtener lecturas desplegar error
    Serial.println("Failed to read from DHT sensor!");
  }
  // Limpiar display
  display.clearDisplay();
  
  // Despliege de la temperatura
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(t);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  
  // Despliege de la humedad
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(h);
  display.print(" %"); 
  
  display.display(); 
}