#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include "DhtData.h"
// Configurações do OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Configurações dos Sensores
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int LDR_PIN = 34; // Sensor de luz
void setup() {
Serial.begin(115200);
setupDht();
setupDisplay();
}
void setupDht() {
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Falha no OLED"));
for(;;);
}
}
void setupDisplay() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 20);
display.println("Estacao meteorologica v1");
display.display();
delay(2000);
}
void refreshDhtData(DhtData &data);
void refreshDhtData(DhtData &data) {
data.temperature = dht.readTemperature();
data.humidity = dht.readHumidity();
}
void loop() {
// 1. Leitura direta dos sensores (Sem PDS)
// float temperatura = dht.readTemperature();
// float umidade = dht.readHumidity();
DhtData dhtData = getDhtData();
// refreshDhtData(dhtData);
float temperatura = dhtData.temperature;
float umidade = dhtData.humidity;
int luminosidade_raw = analogRead(LDR_PIN);
// Mapeia luminosidade para porcentagem (0-100%)
int luminosidade_pct = map(luminosidade_raw, 0, 4095, 0, 100);
// Verifica se a leitura do DHT falhou
if (isnan(temperatura) || isnan(umidade)) {
Serial.println(F("Falha ao ler o sensor DHT!"));
return;
}
// 2. Atualiza o Monitor Serial
Serial.print("Temp: "); Serial.print(temperatura); Serial.print(" C | ");
Serial.print("Umid: "); Serial.print(umidade); Serial.print(" % | ");
Serial.print("Luz: "); Serial.print(luminosidade_pct); Serial.println(" %");
// 3. Atualiza o Display OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Estacao Meteorologica");
display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
display.setCursor(0, 20);
display.print("Temp: ");
display.print(temperatura, 1);
display.print(" C");
display.setCursor(0, 35);
display.print("Umid: ");
display.print(umidade, 1);
display.print(" %");
display.setCursor(0, 50);
display.print("Luz: ");
display.print(luminosidade_pct);
display.print(" %");
display.display();
delay(2000);
}