// Bibliotecas----------------------------------------------------------
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
// GPIO onde o DS18B20 está conectado
const int OneWireBus = 4;
const int ledR = 18;
const int ledV = 17;
const int ledB = 16;
unsigned long tempoAnterior = 0; // Armazena o último tempo em que atualizou
const long intervalo = 1000; // Intervalo em milissegundos (1 segundo)/
// Instância OneWire para o DS18B20
OneWire oneWire(OneWireBus);
DallasTemperature sensors(&oneWire);
// LCD I2C no endereço 0x27 com 16 colunas e 2 linhas
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
sensors.begin();
lcd.init();
lcd.backlight();
pinMode(ledR, OUTPUT);
pinMode(ledV, OUTPUT);
pinMode(ledB, OUTPUT);
}
void loop() {
unsigned long tempoAtual = millis();
if (tempoAtual - tempoAnterior >= intervalo) {
tempoAnterior = tempoAtual; // Atualiza o tempo
// Leitura do DS18B20
sensors.requestTemperatures();
float temperaturaC = sensors.getTempCByIndex(0);
float temperaturaF = sensors.getTempFByIndex(0);
//COMEÇA COM OS LEDS DESLIGADOS
digitalWrite(ledR, 0);
digitalWrite(ledV, 0);
digitalWrite(ledB, 0);
//CONDIÇOES RGB
if (temperaturaC > 30.0) {
digitalWrite(ledR, HIGH); // vermelho
} else if (temperaturaC >= 20.0 && temperaturaC <= 30.0) {
digitalWrite(ledV, HIGH); // verde
} else if (temperaturaC < 19.0) {
digitalWrite(ledB, HIGH); // azul
}
// Exibe a temperatura do DS no Serial Monitor
Serial.print("DS18B20: ");
Serial.print(temperaturaC);
Serial.println(" ºC");
Serial.print("DS18B20: ");
Serial.print(temperaturaF);
Serial.println(" ºF");
//Exibe a temperatura no LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DSc = ");
lcd.print(temperaturaC);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("DSf = ");
lcd.print(temperaturaF);
lcd.print(" F");
}
}