#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// Definições do display OLED
#define SCREEN_I2C_ADDR 0x3C // ou 0x3D
#define SCREEN_WIDTH 128 // Largura do display OLED em pixels
#define SCREEN_HEIGHT 64 // Altura do display OLED em pixels
#define OLED_RST_PIN -1 // Pino de reset (-1 se não disponível)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST_PIN);
// Definições do sensor DHT11
#define DHTPIN 2 // Pino ao qual o sensor DHT11 está conectado
#define DHTTYPE DHT11 // Tipo de sensor DHT11
DHT dht(DHTPIN, DHTTYPE);
// Pino do sensor de umidade do solo
#define SOIL_HUMIDITY_PIN A0
// Definição dos emojis em formato de bitmap (substitua pelo seu bitmap real)
const byte PROGMEM emoji_feliz[][512] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,127,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,7,0,0,0,31,159,128,224,7,0,249,240,63,255,224,224,14,1,255,248,121,248,224,112,14,3,159,188,112,240,112,112,14,3,14,28,96,96,112,112,12,7,4,28,224,0,112,48,28,3,0,28,96,0,112,56,28,3,128,28,112,0,112,56,28,3,128,56,112,0,224,56,28,1,192,120,56,1,224,56,24,0,224,240,28,3,192,24,24,0,121,224,15,7,128,24,24,0,63,192,7,159,0,24,24,0,31,0,3,254,0,24,24,0,6,0,1,248,0,24,24,0,0,0,0,112,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,1,0,0,0,0,128,56,28,3,128,0,0,1,192,56,12,1,192,0,0,3,128,48,14,1,224,0,0,7,128,112,14,0,240,0,0,15,0,112,14,0,124,0,0,62,0,112,7,0,30,0,0,120,0,224,7,0,15,128,1,240,0,224,3,128,7,240,15,224,1,192,3,128,1,255,255,128,1,192,1,192,0,63,252,0,3,128,0,224,0,7,224,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
const byte PROGMEM emoji_espantado[][512] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,127,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,7,240,0,0,60,0,0,120,31,240,0,0,30,0,0,240,126,0,0,0,15,0,0,224,248,0,12,0,7,0,1,193,224,0,15,0,3,128,3,131,128,0,15,224,1,192,3,135,0,0,3,254,1,192,7,7,0,0,0,127,224,224,7,0,0,0,0,7,224,224,14,0,0,0,0,0,96,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,12,0,6,0,0,32,0,48,28,0,31,0,0,248,0,56,28,0,63,128,1,252,0,56,28,0,63,192,3,252,0,56,28,0,63,192,3,252,0,56,24,0,63,128,1,252,0,24,24,0,31,128,1,248,0,24,24,0,15,0,0,240,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,63,224,0,224,3,128,0,1,255,248,1,192,3,128,0,15,240,120,1,192,1,192,7,255,128,0,3,128,0,224,7,252,0,0,7,0,0,240,7,224,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
const byte PROGMEM emoji_triste[][512] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,3,255,255,192,0,0,0,0,31,240,15,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,1,128,0,0,0,0,1,128,3,128,0,0,0,0,1,192,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,6,0,0,0,0,0,0,96,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,12,0,0,0,0,0,0,48,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,24,0,0,48,12,0,0,24,24,0,0,240,15,0,0,24,24,0,7,240,15,224,0,24,24,0,31,128,1,248,0,24,24,0,126,0,0,126,0,24,24,1,248,0,0,31,128,24,24,3,224,0,0,7,192,24,24,1,0,0,0,0,128,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,7,224,0,0,112,6,0,0,31,248,0,0,96,7,0,0,127,252,0,0,224,7,0,0,112,14,0,0,224,3,128,0,224,7,0,1,192,1,128,1,192,3,128,1,128,1,192,1,192,3,128,3,128,0,224,3,128,1,192,7,0,0,240,3,128,1,192,15,0,0,120,3,192,3,192,30,0,0,60,3,255,255,192,60,0,0,30,0,255,255,0,120,0,0,15,0,15,240,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,63,0,0,252,0,0,0,0,31,240,15,248,0,0,0,0,3,255,255,192,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
// Constantes de exibição de emoji
#define FRAME_DELAY (42)
#define FRAME_WIDTH (64)
#define FRAME_HEIGHT (64)
#define FRAME_COUNT_FELIZ (sizeof(emoji_feliz) / sizeof(emoji_feliz[0]))
#define FRAME_COUNT_ESPANTADO (sizeof(emoji_espantado) / sizeof(emoji_espantado[0]))
#define FRAME_COUNT_TRISTE (sizeof(emoji_triste) / sizeof(emoji_triste[0]))
void setup() {
Serial.begin(9600);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_I2C_ADDR);
display.clearDisplay();
display.display();
delay(2000);
}
int frame = 0;
void loop() {
// Leitura dos sensores
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int soilHumidity = analogRead(SOIL_HUMIDITY_PIN);
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.print(" *C\t");
Serial.print("Umidade do ar: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Umidade do solo: ");
Serial.println(soilHumidity);
// Decisão de qual emoji exibir
if (temperature >= 22 && temperature <= 28 && humidity >= 50 && humidity <= 70 && soilHumidity >= 300 && soilHumidity <= 700) {
displayEmoji(emoji_feliz, FRAME_COUNT_FELIZ);
} else if ((temperature >= 18 && temperature <= 22) || (humidity >= 30 && humidity <= 60) || (soilHumidity >= 250 && soilHumidity <= 750)) {
displayEmoji(emoji_espantado, FRAME_COUNT_ESPANTADO);
} else {
displayEmoji(emoji_triste, FRAME_COUNT_TRISTE);
}
delay(2000); // Delay para atualizar a cada 2 segundos
}
void displayEmoji(const byte emoji[][512], int frameCount) {
display.clearDisplay();
display.drawBitmap(32, 0, emoji[frame], FRAME_WIDTH, FRAME_HEIGHT, 1);
display.display();
frame = (frame + 1) % frameCount;
delay(FRAME_DELAY);
}