#include <DHT.h> // Inclui a biblioteca DHT para manipular sensores de temperatura e umidade.
#include <LiquidCrystal.h> // Inclui a biblioteca LiquidCrystal para controlar o display LCD.
#define DHTPIN 14 // Define o pino do sensor DHT como 14.
#define DHTTYPE DHT22 // Define o tipo do sensor DHT como DHT22.
DHT dht(DHTPIN, DHTTYPE); // Inicializa o sensor DHT com os parâmetros definidos.
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // Inicializa o display LCD usando os pinos correspondentes.
long tempoLED; // Declara uma variável para armazenar o tempo referente ao LED.
long tempoLCD; // Declara uma variável para armazenar o tempo referente ao LCD.
int cont = 0; // Declara uma variável para contar qual valor será exibido no LCD.
bool mostrar = true; // Declara uma variável booleana para controlar quando atualizar o display.
int pinTrig = 6; // Define o pino de disparo (trigger) do sensor ultrassônico como 6.
int pinEcho = 7; // Define o pino de eco (echo) do sensor ultrassônico como 7.
long tempoHC; // Declara uma variável para armazenar o tempo do pulso do sensor ultrassônico.
float distancia; // Declara uma variável para armazenar a distância medida pelo sensor ultrassônico.
float temperatura; // Declara uma variável para armazenar a temperatura medida.
float umidade; // Declara uma variável para armazenar a umidade medida.
void setup() {
lcd.begin(16, 2); // Configura o display LCD para ter 16 colunas e 2 linhas.
lcd.print("Ola Estranho!"); // Exibe "Ola Estranho!" no display LCD.
tempoLED = millis(); // Define o tempo inicial do LED.
tempoLCD = millis(); // Define o tempo inicial do LCD.
pinMode(13, OUTPUT); // Define o pino 13 como saída para controlar o LED.
while(millis() < 2000) {} // Aguarda 2 segundos antes de continuar (mensagem de boas-vindas).
}
void loop() {
// Acende o LED por 500 ms a cada 2,5 segundos:
if(millis() - tempoLED < 500) {
digitalWrite(13, HIGH); // Acende o LED.
} else {
digitalWrite(13, LOW); // Apaga o LED.
}
if(millis() - tempoLED > 2500) {
tempoLED = millis(); // Atualiza o tempo do LED após 2,5 segundos.
}
// Exibe a distância no LCD quando cont for 0:
if(cont == 0 && mostrar == true) {
digitalWrite(pinTrig, LOW);
delayMicroseconds(10); // Estabiliza o pino de disparo.
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10); // Envia um pulso de 10 µs.
digitalWrite(pinTrig, LOW);
tempoHC = pulseIn(pinEcho, HIGH); // Mede o tempo do pulso de retorno.
distancia = (tempoHC * 0.0034) / 2; // Calcula a distância (ida e volta do pulso).
lcd.clear(); // Limpa o display LCD.
lcd.print("Distancia:"); // Exibe "Distancia:" no LCD.
lcd.setCursor(10, 1); // Move o cursor para exibir o valor.
lcd.print(distancia); // Exibe a distância medida.
mostrar = false; // Define `mostrar` como false para evitar repetição.
}
// Exibe a temperatura no LCD quando cont for 1:
if(cont == 1 && mostrar == true) {
temperatura = dht.readTemperature(); // Lê a temperatura do sensor DHT.
lcd.clear(); // Limpa o display LCD.
lcd.print("Temperatura"); // Exibe "Temperatura" no LCD.
lcd.setCursor(10, 1); // Move o cursor para exibir o valor.
lcd.print(temperatura); // Exibe a temperatura medida.
mostrar = false; // Define `mostrar` como false para evitar repetição.
}
// Exibe a umidade no LCD quando cont for 2:
if(cont == 2 && mostrar == true) {
umidade = dht.readHumidity(); // Lê a umidade do sensor DHT.
lcd.clear(); // Limpa o display LCD.
lcd.print("Umidade"); // Exibe "Umidade" no LCD.
lcd.setCursor(10, 1); // Move o cursor para exibir o valor.
lcd.print(umidade); // Exibe a umidade medida.
mostrar = false; // Define `mostrar` como false para evitar repetição.
}
// Alterna entre as medições a cada 3 segundos:
if(millis() - tempoLCD > 3000) {
cont++; // Incrementa o contador para mostrar o próximo valor.
tempoLCD = millis(); // Atualiza o tempo do LCD.
mostrar = true; // Permite que o próximo valor seja exibido.
if(cont > 2) { // Se cont for maior que 2, reinicia para 0.
cont = 0;
}
}
}