#define CLK 2
#define DT 4
#define SW 3
#define reley 13
#define led 12
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, A5, A4, U8X8_PIN_NONE);
#include <GyverHTU21D.h>
GyverHTU21D htu;
#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);
int value_s = 50;
int value_r = 0;
int value_h = 0;
int value_hower = 0;
int value_min = 30;
bool flag_start = false;
bool flag_set = false;
void setup() {
Serial.begin(9600);
htu.begin();
u8g2.begin();
enc1.setType(TYPE2);
pinMode(reley, OUTPUT);
pinMode(led, OUTPUT);
oled();
}
void loop() {
enc1.tick();
if(flag_set == false){
if (enc1.isRight()) value_s++;
if (enc1.isLeft()) value_s--;
if (enc1.isRightH()) value_s += 5;
if (enc1.isLeftH()) value_s -= 5;
} else {
if (enc1.isRight() or enc1.isRightH() and value_hower != 24){
value_min += 30;
if (value_min == 60) {
value_min = 0;
value_hower += 1;
}
if(value_hower >= 24){
value_hower = 24;
value_min = 0;
}
}
if (enc1.isLeft()){
if (value_min <= 0 and value_hower != 0) {
value_min -= 30;
value_min = 30;
value_hower -= 1;
} else if (value_min == 30){
value_min -= 30;
value_min = 0;
}
}
}
if (enc1.isPress()) flag_start = !flag_start;
if (enc1.isClick()) flag_set = !flag_set;
if (enc1.isTurn()) {
value_s = constrain(value_s, 0, 100);
oled();
}
unsigned long i = ((value_hower * 60) + value_min) * 60000;
digitalWrite(led, flag_start);
if(flag_start == true and value_r <= value_s){
timer(i);
} else {
digitalWrite(reley, LOW);
}
}
void oled(){
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.setCursor(0, 10);
u8g2.print("Set: ");
u8g2.print(value_s);
u8g2.print("*C/");
u8g2.print(value_hower);
u8g2.print(":");
u8g2.print(value_min);
u8g2.print("h");
u8g2.setCursor(0, 30);
u8g2.print("Real: ");
u8g2.print(value_r);
u8g2.print("*C");
u8g2.setCursor(0, 50);
u8g2.print("Humi: ");
u8g2.print(value_h);
u8g2.print("%");
} while (u8g2.nextPage());
}
void temp(){
value_r = htu.getTemperature();
value_h = htu.getHumidity();
}
unsigned long previousMillis = 0;
void timer(unsigned long inter){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) {
Serial.println("nfqvth");
digitalWrite(reley, HIGH);
previousMillis = currentMillis;
}
}