#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <EEPROM.h>
#define EEPROM_MIN_V 0
#define EEPROM_MAX_V (EEPROM_MIN_V + 2)
#define DHTTYPE DHT22 // Sensor DHT11
#define DHTPIN 7 // Digital pin connected to the DHT sensor
#define BTN_PIN 8
bool STATE = false;
float MIN_t;
float MAX_t;
float CUR_t;
DHT dht(DHTPIN, DHTTYPE);
int button_state = 1;
int last_button_state = 1;
LiquidCrystal_I2C lcd(0x27,16,2);
byte dcircle[] = {
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000
};
void write_temperature(int pos, float t)
{
int it = (int)(t*10);
EEPROM.put(pos, it);
}
float read_temperature(int pos)
{
int it;
EEPROM.get(pos, it);
float t = (float)(it/10);
return t;
}
float c_to_f(float c)
{
return (c * 1.8) + 32;
}
void setup()
{
lcd.init();
lcd.clear();
lcd.backlight();
lcd.createChar(0, dcircle);
pinMode(BTN_PIN, INPUT_PULLUP);
dht.begin();
// CUR_t = analogRead(TMP36_PIN) * (5000 / 1024.0);
CUR_t = dht.readTemperature();
write_temperature(EEPROM_MIN_V, CUR_t);
write_temperature(EEPROM_MAX_V, CUR_t);
MIN_t = CUR_t;
MAX_t = CUR_t;
Serial.begin(9600);
}
long long last_debounce_time = millis();
long long debounce_delay_expected = 2000;
void loop()
{
CUR_t = dht.readTemperature();
Serial.println(CUR_t);
if (CUR_t > MAX_t) {
MAX_t = CUR_t;
write_temperature(EEPROM_MAX_V, MAX_t);
} else if (CUR_t < MIN_t) {
MIN_t = CUR_t;
write_temperature(EEPROM_MIN_V, MIN_t);
}
lcd.setCursor(0, 0);
lcd.print("CUR: ");
if (!STATE) lcd.print(CUR_t, 1);
else lcd.print(c_to_f(CUR_t), 1);
lcd.setCursor(14, 0);
lcd.write(0);
if (!STATE) lcd.print("C");
else lcd.print("F");
lcd.setCursor(0, 1);
if (!STATE) lcd.print(MIN_t, 1);
else lcd.print(c_to_f(MIN_t), 1);
lcd.setCursor(9, 1);
if (!STATE) lcd.print(MAX_t, 1);
else lcd.print(c_to_f(MAX_t), 1);
button_state = digitalRead(BTN_PIN);
if (button_state != last_button_state) {
last_debounce_time = millis();
if (button_state == LOW) {
STATE = !STATE;
}
delay(50);
}
/* ENTRA SE => o botão ainda estiver pressionado,
* & o tempo desde que ele foi inicialmente pressionado > 2000ms */
if ((button_state == LOW) && (millis() - last_debounce_time > debounce_delay_expected)) {
write_temperature(EEPROM_MIN_V, CUR_t);
write_temperature(EEPROM_MAX_V, CUR_t);
MIN_t = CUR_t;
MAX_t = CUR_t;
Serial.println("zerando estatisticas");
}
last_button_state = button_state;
}