// Breno Correia Lociks
// Exercício 7
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
#define dataPin 12
#define ntc 14
#define R1 16
#define G1 17
#define B1 5
#define R2 27
#define G2 26
#define B2 25
const int OneWireBus = 4;
OneWire oneWire(OneWireBus);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,16,2);
DHTesp dht;
int telaAtual = 0;
int tempoAnterior = 0;
int leituras = 0;
float soma = 0;
float media = 0;
void setup() {
Serial.begin(115200);
sensors.begin();
lcd.init();
lcd.setBacklight(HIGH);
dht.setup(dataPin, DHTesp::DHT22);
pinMode(R1, OUTPUT);
pinMode(G1, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(G2, OUTPUT);
pinMode(B2, OUTPUT);
pinMode(ntc, INPUT);
}
void loop() {
float t = dht.getTemperature();
float h = dht.getHumidity();
sensors.requestTemperatures();
float temperaturaC = sensors.getTempCByIndex(0);
float temperaturaF = sensors.getTempFByIndex(0);
int NTCLeitura = analogRead(ntc);
float celciusNTC = 1.0 / (log(1.0 / (4095.0 / NTCLeitura - 1.0)) / 3950.0 + 1.0 / 298.15) - 273.15;
soma += celciusNTC;
leituras += 1;
if(leituras == 10) {
media = soma / leituras;
soma = 0;
leituras = 0;
}
if(millis() - tempoAnterior > 1000) {
tempoAnterior = millis();
Serial.print(temperaturaC);
Serial.println("ºC");
Serial.print(temperaturaF);
Serial.println("ºF");
Serial.println(" ");
Serial.print(t);
Serial.println("ºC");
Serial.print(h);
Serial.println("%");
Serial.println(" ");
if(telaAtual == 0) {
telaAtual = 1;
}
else if(telaAtual == 1) {
telaAtual = 2;
}
else if(telaAtual == 2) {
telaAtual = 0;
}
}
if(telaAtual == 0) {
lcd.setCursor(0,0);
lcd.print(temperaturaC);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print(temperaturaF);
lcd.print(" F ");
}
if(telaAtual == 1) {
lcd.setCursor(0,0);
lcd.print(t);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print(h);
lcd.print(" % ");
}
if(telaAtual == 2) {
lcd.setCursor(0,0);
lcd.print(media);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print(" ");
}
if(t > 30) {
digitalWrite(R1, HIGH);
digitalWrite(G1, LOW);
digitalWrite(B1, LOW);
}
if(t < 30 && t > 20) {
digitalWrite(R1, LOW);
digitalWrite(G1, HIGH);
digitalWrite(B1, LOW);
}
if(t < 19) {
digitalWrite(R1, LOW);
digitalWrite(G1, LOW);
digitalWrite(B1, HIGH);
}
if(media > temperaturaC) {
digitalWrite(R2, HIGH);
digitalWrite(G2, LOW);
digitalWrite(B2, LOW);
}
if((int)media == (int)temperaturaC) {
digitalWrite(R2, LOW);
digitalWrite(G2, HIGH);
digitalWrite(B2, LOW);
}
if(media < temperaturaC) {
digitalWrite(R2, LOW);
digitalWrite(G2, LOW);
digitalWrite(B2, HIGH);
}
}