#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

// Definições do OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Definições do DHT22
#define DHTPIN 17    
#define DHTTYPE DHT22   
DHT dht(DHTPIN, DHTTYPE);

// Definições do botão
const int buttonPin = 16;
int buttonState = 0;

void setup() {
  pinMode(buttonPin, INPUT);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  dht.begin();

  // Mensagem de boas-vindas
  display.setCursor(0, 0);
  display.print("SEJAM BEM-VINDOS");
  display.display();
  delay(2000);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  
  if (buttonState == HIGH) {
    // Ler temperatura e umidade
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // Verifica se a leitura falhou
    if (isnan(h) || isnan(t)) {
      display.clearDisplay();
      display.setCursor(0, 0);
      display.print("Falha na leitura");
      display.display();
      return;
    }

    // Exibir valores no OLED
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Temp: ");
    display.print(t);
    display.print(" C");

    display.setCursor(0, 10);
    display.print("Umidade: ");
    display.print(h);
    display.print(" %");

    display.display();
  } else {
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Sistema desligado");
    display.display();
  }
  delay(2000); // Atualiza a cada 2 segundos
}
$abcdeabcde151015202530fghijfghij