Skip to content

Commit

Permalink
use EEManager
Browse files Browse the repository at this point in the history
  • Loading branch information
SeryiBaran committed Dec 9, 2023
1 parent 3e8ef3f commit 36030d9
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 79 deletions.
13 changes: 3 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,11 @@
Занятые ресурсы МК по мнению Platformio:

```
RAM: [= ] 10.6% (used 218 bytes from 2048 bytes)
Flash: [=== ] 28.7% (used 8814 bytes from 30720 bytes)
RAM: [= ] 10.4% (used 213 bytes from 2048 bytes)
Flash: [=== ] 28.9% (used 8888 bytes from 30720 bytes)
```

## Зависимости (устанавливаются через Platformio)

- EncButton
- GyverNTC
- GyverSegment
- GyverIO
- PinChangeInterrupt
- TimerMs
## Зависимости - в [platformio.ini](./platformio.ini)

## Электронные компоненты

Expand Down
1 change: 1 addition & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ lib_deps =
gyverlibs/GyverSegment@^1.4
nicohood/PinChangeInterrupt@^1.2.9
gyverlibs/TimerMs@^1.2
gyverlibs/EEManager@^2.0
7 changes: 2 additions & 5 deletions src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,8 @@
#define TM1637_DIGITS_NUM 4 // Количество разрядов на дисплее

// Настройки EEPROM
#define EEPROM_INIT_MARKER_ADDR 1023 // Адрес в EEPROM по которому устройство будет понимать что уже включалось и в нем что-то сохранено
#define EEPROM_INIT_MARKER_VALUE 10 // Значение флага выше (взято от балды)
// Настройки EEPROM адресов с настройками
#define EEPROM_SETTED_TEMP_ADDR 0 // Адрес в EEPROM с заданной температурой
#define EEPROM_HYSTERESIS_ADDR 1 // Адрес в EEPROM с заданным гистерезисом
#define EEPROM_INIT_MARKER_VALUE 10 // Флаг по которому устройство будет понимать что уже включалось и в нем что-то сохранено (взято от балды)
#define EEPROM_SETTINGS_ADDR 0 // Начальный адрес в EEPROM с настройками

// Режимы дисплея
#define MODE_SETTED_TEMP 0
Expand Down
95 changes: 31 additions & 64 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,36 @@
#include "config.h"

// Библиотеки
#include <EEPROM.h>
#include <EEManager.h>
#include <EncButton.h>
#include <GyverSegment.h>
#include <GyverNTC.h>
#include <TimerMs.h>
#include <PinChangeInterrupt.h>

// Переменные
int8_t setted_temp = DEFAULT_SETTED_TEMP;

int8_t readed_temp = DEFAULT_READED_TEMP;
int8_t hysteresis = DEFAULT_HYSTERESIS;
bool need_redraw_display = false;
uint8_t mode = MODE_DEFAULT;
bool need_save_settings = false;
uint8_t error_code = NO_ERROR;
uint8_t message_code;

struct Settings
{
int8_t setted_temp = DEFAULT_SETTED_TEMP;
int8_t hysteresis = DEFAULT_HYSTERESIS;
};

Settings settings;

// Инициализация объектов
EEManager memory(settings, SETTINGS_SAVE_TIME);
EncButton enc(PIN_ENC_A, PIN_ENC_B, PIN_ENC_BUTT);
Disp1637Colon display(PIN_TM1637_DIO, PIN_TM1637_CLK);
GyverNTC ntc(PIN_NTC, NTC_RESISTOR, NTC_BETA_COEF, NTC_BASE_TEMP, NTC_BASE_RESISTANCE, NTC_RESOLUTION);
TimerMs temp_read_timer(TEMP_READ_TIME, 1, 0);
TimerMs relay_update_timer(RELAY_UPDATE_TIME, 1, 0);
TimerMs save_settings_timer(SETTINGS_SAVE_TIME, 0, 1);
TimerMs message_close_timer(MESSAGE_TIME, 0, 1);

void show_error()
Expand Down Expand Up @@ -57,42 +63,6 @@ void close_message()
DEBUGLN("close_message: closed");
}

void save_settings()
{
DEBUG("save_settings: ");
DEBUG("setted_temp is ");
DEBUG(setted_temp);
DEBUGLN("");

DEBUG("save_settings: ");
DEBUG("hysteresis is ");
DEBUG(hysteresis);
DEBUGLN("");

EEPROM.put(EEPROM_SETTED_TEMP_ADDR, setted_temp);
EEPROM.put(EEPROM_HYSTERESIS_ADDR, hysteresis);

message_code = MESSAGE_SAVED;
show_message();

need_save_settings = false;
}

void load_settings()
{
// Если запустили первый раз
if (EEPROM.read(EEPROM_INIT_MARKER_ADDR) != EEPROM_INIT_MARKER_VALUE)
{
EEPROM.write(EEPROM_INIT_MARKER_ADDR, EEPROM_INIT_MARKER_VALUE); // Пометили что запустили

EEPROM.put(EEPROM_SETTED_TEMP_ADDR, setted_temp);
EEPROM.put(EEPROM_HYSTERESIS_ADDR, hysteresis);
}

EEPROM.get(EEPROM_SETTED_TEMP_ADDR, setted_temp);
EEPROM.get(EEPROM_HYSTERESIS_ADDR, hysteresis);
}

void read_and_show_temp()
{
int8_t previous_readed_temp = readed_temp;
Expand All @@ -109,9 +79,9 @@ void read_and_show_temp()

void update_relay()
{
if (readed_temp < setted_temp - hysteresis)
if (readed_temp < settings.setted_temp - settings.hysteresis)
digitalWrite(PIN_RELAY, HIGH);
else if (readed_temp > setted_temp + hysteresis)
else if (readed_temp > settings.setted_temp + settings.hysteresis)
digitalWrite(PIN_RELAY, LOW);
}

Expand Down Expand Up @@ -147,11 +117,11 @@ void redraw_display()
display.clear();

if (mode == MODE_SETTED_TEMP)
print_mode("S", setted_temp);
print_mode("S", settings.setted_temp);
else if (mode == MODE_READED_TEMP)
print_mode("C", readed_temp);
else if (mode == MODE_HYSTERESIS)
print_mode("H", hysteresis);
print_mode("H", settings.hysteresis);
else if (mode == MODE_ERROR)
print_mode("E", error_code);
else if (mode == MODE_MESSAGE)
Expand All @@ -170,17 +140,15 @@ void enc_handle()
change_mode();
if (enc.turn())
{
int8_t previous_setted_temp = setted_temp;
int8_t previous_hysteresis = hysteresis;
if (mode == MODE_SETTED_TEMP)
{
setted_temp += TEMP_SET_STEP * ENCODER_CHANGE_DIR * enc.dir();
setted_temp = constrain(setted_temp, MIN_SETTED_TEMP, MAX_SETTED_TEMP);
settings.setted_temp += TEMP_SET_STEP * ENCODER_CHANGE_DIR * enc.dir();
settings.setted_temp = constrain(settings.setted_temp, MIN_SETTED_TEMP, MAX_SETTED_TEMP);
}
else if (mode == MODE_HYSTERESIS)
{
hysteresis += HYSTERESIS_SET_STEP * ENCODER_CHANGE_DIR * enc.dir();
hysteresis = constrain(hysteresis, MIN_HYSTERESIS, MAX_HYSTERESIS);
settings.hysteresis += HYSTERESIS_SET_STEP * ENCODER_CHANGE_DIR * enc.dir();
settings.hysteresis = constrain(settings.hysteresis, MIN_HYSTERESIS, MAX_HYSTERESIS);
}

DEBUG("enc_handle: ");
Expand All @@ -190,12 +158,8 @@ void enc_handle()
DEBUG(hysteresis);
DEBUGLN("");

if (previous_setted_temp != setted_temp || previous_hysteresis != hysteresis)
{
need_save_settings = true;
need_redraw_display = true;
save_settings_timer.start();
}
memory.update();
need_redraw_display = true;
}
}

Expand All @@ -214,31 +178,34 @@ void setup()
attachPCINT(digitalPinToPCINT(PIN_ENC_B), enc_isr, CHANGE);
attachPCINT(digitalPinToPCINT(PIN_ENC_BUTT), enc_isr, CHANGE);

load_settings();
memory.begin(EEPROM_SETTINGS_ADDR, EEPROM_INIT_MARKER_VALUE);

need_redraw_display = true;
}

void loop()
{
enc.tick();
if (memory.tick())
{
message_code = MESSAGE_SAVED;
show_message();
}

enc_handle();
enc.tick();

if (temp_read_timer.tick())
read_and_show_temp();

if (relay_update_timer.tick())
update_relay();

if (save_settings_timer.tick() && need_save_settings)
save_settings();
if (message_close_timer.tick())
close_message();

if (error_code && mode != MODE_ERROR)
show_error();

if (message_close_timer.tick())
close_message();
enc_handle();

if (need_redraw_display)
redraw_display();
Expand Down
1 change: 1 addition & 0 deletions wokwi/libraries.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ GyverSegment
TimerMs
PinChangeInterrupt
GyverNTC
EEManager

0 comments on commit 36030d9

Please sign in to comment.