#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int mem_status_addr = 10;
int mem_config_addr = 20;
int config_value= -999;
int program_button = 3;
byte mem_init_false = B10100111;
byte mem_init_true = B11100011;
bool is_config_saved = false;
void init_memory() {
byte curr_mem_status;
curr_mem_status = EEPROM.read(mem_status_addr);
if ((curr_mem_status != mem_init_false) and (curr_mem_status != mem_init_true)) {
EEPROM.write(mem_status_addr, mem_init_false);
}
else{
is_config_saved = (curr_mem_status == mem_init_true);
}
}
void save_config( byte test_value) {
config_value = test_value;
EEPROM.write(mem_config_addr, config_value);
is_config_saved = true;
// lcd.setCursor(1, 0);
// lcd.print('Saved config');
// lcd.setCursor(2, 0);
// lcd.print('test_value');
}
void read_config(){
config_value = EEPROM.read(mem_config_addr);
// lcd.setCursor(0, 0);
// lcd.print('Saved config');
lcd.setCursor(3, 1);
lcd.print('test_value');
}
void led_on(){
digitalWrite(LED_BUILTIN, HIGH);
}
void led_off(){
digitalWrite(LED_BUILTIN, LOW);
}
void blink( int period = 1000){
led_on();
delay(500);
led_off();
delay(500);
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
// ----------------
pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, INPUT);
init_memory();
blink();
// --------------------
lcd.init();
lcd.backlight();
delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
// Serial.println(is_config_saved);
lcd.setCursor( 0, 0);
lcd.print("Config is saved:");
lcd.setCursor( 0, 1);
lcd.print(is_config_saved);
if (is_config_saved != true){
blink();
if (digitalRead(program_button)){
save_config(54);
}
}
else {
led_off();
}
}