#include <LiquidCrystal.h>
#include <Keypad.h>
#include <EEPROM.h>
#define FAN 13
#define ISITICI 6
#define SENSOR A5
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
static bool secim_modu = false;
char girilen_deger;
uint32_t sicaklik_verisi;
uint32_t sicaklik_verisi_guncelleme;
bool lcd_temizleme;
bool basamak_secim_modu = false;
String girilen_tuslar = "";
int girilen_tus_typecast;
static bool girilen_sayi_kaydedici_durumu;
bool lcd_guncelleme;
bool lcd_mod_clear;
bool lcd_fan_set_temizleme;
uint8_t EEPROM_adres = 0;
uint8_t EEPROM_adres_isitici = 30;
int EEPROM_okunan;
static String girilen_tuslar_global;
bool EEPROM_fandeger_kontrol = false;
uint8_t Hysteresis_bandi = 10;
bool fan_set;
bool EEPROM_deger_kontrol_isitici;
uint8_t EEPROM_okunan_isi;
bool isitici_set_ekran;
bool isitici_set_text = false;
char kontrol_key;
bool key_flag;
//uint32_t girilen_deger;
const byte keypad_satir_sayisi = 4;
const byte keypad_sutun_sayisi = 4;
byte satir_pinleri[keypad_satir_sayisi] = {5, 4, 3, 2};
byte sutun_pinleri[keypad_sutun_sayisi] = {A3, A2, A1, A0};
char keys[keypad_satir_sayisi][keypad_sutun_sayisi] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad keypad = Keypad(makeKeymap(keys), satir_pinleri, sutun_pinleri, keypad_satir_sayisi, keypad_sutun_sayisi);
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(ISITICI, OUTPUT);
pinMode(FAN, OUTPUT);
sicaklik_verisi_guncelleme = sicaklik_verisi;
lcd.setCursor(0, 0);
lcd.print("SICAKLIK KONTROL");
lcd.setCursor(4, 1);
lcd.print("PROJESI");
delay(100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MOD SECIM #");
lcd.setCursor(0, 1);
lcd.print("EEPROM KAYIT *");
delay(100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("* Basilmadan Mod");
lcd.setCursor(4, 1);
lcd.print("Degismez");
delay(100);
lcd.clear();
}
void loop() {
char key = keypad.getKey();
sicaklik_verisi = map(analogRead(SENSOR), 0, 1023, 0, 50);
if (key) {
Serial.println(key);
}
if (key == '#' /*&& girilen_sayi_kaydedici_durumu == false*/) {
secim_modu = !secim_modu;
lcd_mod_clear = true;
//girilen_sayi_kaydedici_durumu = true;
}
if (sicaklik_verisi == !sicaklik_verisi_guncelleme) {
lcd_guncelleme = true;
sicaklik_verisi = sicaklik_verisi_guncelleme;
}
if (secim_modu == true) {
if (lcd_mod_clear == true) {
lcd.clear();
lcd_mod_clear = false;
}
if (fan_set == false && isitici_set_ekran == false) {
lcd.setCursor(5, 0);
lcd.print("FAN SET");
}
if (key >= '0' && key <= '9' ) {
girilen_tuslar = sayi_kaydir(girilen_tuslar, key);
lcd.setCursor(7, 1);
lcd.println(girilen_tuslar);
if (girilen_tuslar) {
girilen_tuslar_global = girilen_tuslar;
}
if ((girilen_tuslar.length() + 1) > 2) {
girilen_tuslar = "";
}
}
if (key == '*' && fan_set == false && isitici_set_ekran == false) { // SAYI SECIM EKRANI
lcd_temizleme = true;
lcd_fan_set_temizleme = true;
girilen_tus_typecast = atoi(girilen_tuslar_global.c_str());
EEPROM_fandeger_kontrol = true;
EEPROM.put(EEPROM_adres, atoi(girilen_tuslar_global.c_str()));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DEGER KAYDEDILDI");
delay(1000);
fan_set = true;
isitici_set_ekran = true;
}
if (isitici_set_ekran == true && fan_set == true && isitici_set_text == false) {
lcd.clear();
Serial.println("1 executed");
lcd_fan_set_temizleme = false;
Serial.println("2 executed");
lcd.setCursor(3, 0);
lcd.println("ISITICI SET");
isitici_set_text = true;
}
if(isitici_set_text == true && key =='*' && key_flag == false){ //PARAZİT ÖNLEME
key_flag = true;
key = "";
}
if (key == '*' && fan_set == true && isitici_set_text == true) { // SAYI SECIM EKRANI
//lcd_temizleme = true;
//girilen_sayi_kaydedici_durumu = !girilen_sayi_kaydedici_durumu;
girilen_tus_typecast = atoi(girilen_tuslar_global.c_str());
EEPROM_deger_kontrol_isitici = true;
EEPROM.put(EEPROM_adres_isitici, atoi(girilen_tuslar_global.c_str()));
Serial.println("3 executed");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DEGER KAYDEDILDI");
delay(1000);
isitici_set_ekran = false;
isitici_set_text = false;
fan_set = false;
isitici_set_ekran = false;
key_flag = false;
EEPROM_deger_kontrol_isitici = true;
secim_modu = false;
}
} else { // ANA EKRAN
lcd.setCursor(0, 0);
lcd.print("SICAKLIK:");
if (lcd_guncelleme = true) {
lcd.setCursor(10, 0);
lcd.print(sicaklik_verisi);
lcd_guncelleme = false;
}
lcd.setCursor(0, 1);
lcd.print("FAN:");
lcd.setCursor(8, 1);
lcd.print("ISI.:");
if (EEPROM_deger_kontrol_isitici == false) {
lcd.setCursor(14, 1);
lcd.print("XX");
}
if (EEPROM_fandeger_kontrol == false) {
lcd.setCursor(5, 1);
lcd.print("XX");
} else {
lcd.setCursor(5, 1);
EEPROM.get(EEPROM_adres, EEPROM_okunan);
lcd.print(EEPROM_okunan);
lcd.setCursor(14, 1);
EEPROM.get(EEPROM_adres_isitici, EEPROM_okunan_isi);
lcd.print(EEPROM_okunan_isi);
}
if(EEPROM_okunan > EEPROM_okunan_isi){
lcd.setCursor(0,0);
lcd.println("HATALI SET");
lcd.setCursor(0,0);
lcd.println("SISTEM INAKTIF");
digitalWrite(FAN,LOW);
digitalWrite(ISITICI,LOW);
}
// EEPROM.get(EEPROM_adres, EEPROM_okunan);
//lcd.print(EEPROM_okunan);
if (lcd_temizleme == true) {
lcd.clear();
lcd_temizleme = false;
}
//HYSTERESİS KONTROLÜ FAN
float hysteresis_asil_deger = EEPROM_okunan * (Hysteresis_bandi / 100.0);
if (EEPROM_fandeger_kontrol == true) {
if (sicaklik_verisi > EEPROM_okunan + hysteresis_asil_deger) {
digitalWrite(FAN, LOW);
} else if (sicaklik_verisi < EEPROM_okunan - hysteresis_asil_deger) {
digitalWrite(FAN, HIGH);
} else {
digitalWrite(FAN, LOW);
}
}
}
//HYSTERESİS KONTROLÜ ISITICI
float hysteresis_asil_deger = EEPROM_okunan_isi * (Hysteresis_bandi / 100.0);
if (EEPROM_deger_kontrol_isitici == true) {
if (sicaklik_verisi > EEPROM_okunan_isi + hysteresis_asil_deger) {
digitalWrite(ISITICI, LOW);
} else if (sicaklik_verisi < EEPROM_okunan_isi - hysteresis_asil_deger) {
digitalWrite(ISITICI, HIGH);
} else {
digitalWrite(ISITICI, LOW);
}
}
}
String sayi_kaydir(String onceki_hane, char yeni_hane) {
if (onceki_hane.length() < 16) {
return onceki_hane + yeni_hane;
} else {
return onceki_hane.substring(1) + yeni_hane;
}
}