#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
//CURSO TÉCNICO EM ELETRÔNICA
//SISTEMAS EMBARCADOS 2
//PROF. CARLOS BARREIRA
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
const int DHT_PIN = 15;
DHTesp dhtSensor; //identificar o dht como sensor
//Constantes e variáveis-----------------------------------------------
// GPIO onde o DS18B20 está conectado
const int OneWireBus = 4;
const int R1 = 16;
const int G1 = 17;
const int B1 = 5;
const int R2 = 34;
const int G2 = 32;
const int B2 = 33;
// Configure uma instância oneWire para se comunicar com qualquer dispositivo One-Wire
OneWire oneWire(OneWireBus);
// Passe nossa referência oneWire para o sensor de temperatura Dallas
DallasTemperature sensors(&oneWire);
// Config. o endereço I2C LCD para 0x27 com 16 caracteres e 2 linhas
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
// Inicia o Serial Monitor
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // setta o sensor no pino e o identifica como DHT22
// Inicia o DS18B20 sensor
sensors.begin();
//Inicia o lcd
lcd.init();
//Ativa o backlight do lcd
lcd.backlight();
pinMode(R1, OUTPUT); // setta o pino como saída
pinMode(G1, OUTPUT); // setta o pino como saída
pinMode(B1, OUTPUT); // setta o pino como saída
}
void loop() {
//Faz a leitura de temperatura
sensors.requestTemperatures();
//Armazena os valores medidos em celsius e em fahrenheit
float temperaturaC = sensors.getTempCByIndex(0);
float temperaturaF = sensors.getTempFByIndex(0);
//Exibe a temperatura no Serial Monitor
int analogValue = analogRead(13);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
if (temperaturaC > 30) {
digitalWrite(R1, HIGH);
} else if (temperaturaC > 20 && temperaturaC <= 30) {
digitalWrite(G1, HIGH);
} else {
digitalWrite(B1, HIGH);
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
Serial.print(temperaturaC);
Serial.println("ºC");
Serial.print(temperaturaF);
Serial.println("ºF");
Serial.print("NTC: ");
Serial.print(celsius);
Serial.println("ºC");
//Exibe a temperatura no LCD
lcd.setCursor(0, 0);
lcd.print("DS: ");
lcd.print(temperaturaC);
lcd.println("C*");
lcd.setCursor(0, 1);
lcd.print("DHT ");
lcd.println(String(data.temperature));
lcd.print("C*");
delay(1000);
}