// Bibliotecas
#include <DHT.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Wire.h>
#include "Imagem.cpp"
// Definições
#define SCREEN_WIDTH 128 // Largura do display em pixels
#define SCREEN_HEIGHT 64 // Altura do display em pixels
#define SCREEN_ADDRESS 0x3C // Endereço I2C do display
#define OLED_RESET -1 // Pino de reset do display (-1 se não utilizado)
#define pinTrig 15 // Pino do trigger do sensor ultrassônico
#define pinEcho 2 // Pino do echo do sensor ultrassônico
#define pinDHT 13 // Pino do sensor DHT
#define DHTType 22 // Tipo do sensor DHT
// Instâncias
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Objeto do display
DHT dht(pinDHT, DHTType); // Objeto do sensor DHT
// Variáveis
float tempoEcho = 0; // Tempo de eco do ultrassônico
float umidade = 0; // Valor de umidade
float temperatura = 0; // Valor de temperatura
// Constantes
const float velocidadeSom = 340; // Velocidade do som em m/s
// Protótipos de Funções
float medeDistancia(); // Função para medir a distância com o sensor ultrassônico
void setup() {
Serial.begin(115200); // Inicia a comunicação serial
oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); // Inicia o display OLED
pinMode(pinTrig, OUTPUT); // Configura o pino do trig como saída
pinMode(pinEcho, INPUT); // Configura o pino do echo como entrada
}
void loop() {
umidade = dht.readHumidity();
temperatura = dht.readTemperature();
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
// Quadrado 1: Nome
oled.fillRect(0, 0, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, BLACK);
oled.setCursor(5, 5);
oled.setTextColor(BLACK);
oled.print("Nome:");
oled.setTextColor(WHITE);
oled.setCursor(5, 20);
oled.print("Mayck Barbosa");
// Quadrado 2: Distância
oled.fillRect(SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, BLACK);
oled.setCursor(SCREEN_WIDTH / 2 + 5, 5);
oled.setTextColor(BLACK);
oled.print("Distancia:");
oled.setTextColor(WHITE);
oled.setCursor(SCREEN_WIDTH / 2 + 5, 20);
oled.print(medeDistancia() / 10);
oled.println(" cm");
// Quadrado 3: Temperatura
oled.fillRect(0, SCREEN_HEIGHT / 2, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, BLACK);
oled.setCursor(5, SCREEN_HEIGHT / 2 + 5);
oled.setTextColor(BLACK);
oled.print("Temperatura:");
oled.setTextColor(WHITE);
oled.setCursor(5, SCREEN_HEIGHT / 2 + 20);
oled.print(temperatura);
oled.write(248);
oled.println(" C");
// Quadrado 4: Umidade
oled.fillRect(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, BLACK);
oled.setCursor(SCREEN_WIDTH / 2 + 5, SCREEN_HEIGHT / 2 + 5);
oled.setTextColor(BLACK);
oled.print("Umidade:");
oled.setTextColor(WHITE);
oled.setCursor(SCREEN_WIDTH / 2 + 5, SCREEN_HEIGHT / 2 + 20);
oled.print(umidade);
oled.println(" %");
oled.display();
delay(4000);
}
float medeDistancia()
{
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
tempoEcho = pulseIn(pinEcho, HIGH);
float distancia_mm = tempoEcho * velocidadeSom / 1000 / 2;
return distancia_mm;
}
// TENTEI FAZER COM QUE APARECE TODAS AS INFORMAÇÕES (COM IMAGENS) EM APENAS UMA TELA...
// MAS, NÃO DEU CERTO!