Добавлено сохранение состояния (вкл/выкл) лампы в EEPROM память; Минорные изменения android приложения

This commit is contained in:
gunner47
2019-09-17 11:15:18 +03:00
parent fa2c26baae
commit d919889212
7 changed files with 33 additions and 9 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -48,13 +48,14 @@
* *
* 111-134 24 настройки режима избранных эффектов (интервал - 2 байта; разброс - 2 байта; вкл/выкл каждого эффекта - 20 (MODE_AMOUNT) байт; вкл/выкл не хранится в EEPROM) * 111-134 24 настройки режима избранных эффектов (интервал - 2 байта; разброс - 2 байта; вкл/выкл каждого эффекта - 20 (MODE_AMOUNT) байт; вкл/выкл не хранится в EEPROM)
* *
* 197 1 состояние лампы (вкл/выкл)
* 198 1 признак первого запуска (определяет необходимость первоначальной записи всех хранимых настроек) * 198 1 признак первого запуска (определяет необходимость первоначальной записи всех хранимых настроек)
* 199 1 время до "рассвета" (dawnMode) * 199 1 время до "рассвета" (dawnMode)
* 200 1 текущий режим (currentMode) * 200 1 текущий режим (currentMode)
* *
* Не используются адреса: * Не используются адреса:
* 96-110 15 резерв, можно добавить ещё 5 эффектов * 96-110 15 резерв, можно добавить ещё 5 эффектов
* 135-197 63 если добавить ещё 10 эффектов, начальный адрес неиспользуемой памяти сдвинется с 135 на 145 * 135-196 62 если добавить ещё 10 эффектов, начальный адрес неиспользуемой памяти сдвинется с 135 на 145
*/ */
#include <EEPROM.h> #include <EEPROM.h>
@@ -63,6 +64,7 @@
#define EEPROM_ALARM_START_ADDRESS (0U) // начальный адрес в EEPROM памяти для записи настроек будильников #define EEPROM_ALARM_START_ADDRESS (0U) // начальный адрес в EEPROM памяти для записи настроек будильников
#define EEPROM_MODES_START_ADDRESS (21U) // начальный адрес в EEPROM памяти для записи настроек эффектов (яркость, скорость, масштаб) #define EEPROM_MODES_START_ADDRESS (21U) // начальный адрес в EEPROM памяти для записи настроек эффектов (яркость, скорость, масштаб)
#define EEPROM_FAVORITES_START_ADDRESS (111U) // начальный адрес в EEPROM памяти для записи настроек режима избранных эффектов #define EEPROM_FAVORITES_START_ADDRESS (111U) // начальный адрес в EEPROM памяти для записи настроек режима избранных эффектов
#define EEPROM_LAMP_ON_ADDRESS (197U) // адрес в EEPROM памяти для записи состояния лампы (вкл/выкл)
#define EEPROM_FIRST_RUN_ADDRESS (198U) // адрес в EEPROM памяти для записи признака первого запуска (определяет необходимость первоначальной записи всех хранимых настроек) #define EEPROM_FIRST_RUN_ADDRESS (198U) // адрес в EEPROM памяти для записи признака первого запуска (определяет необходимость первоначальной записи всех хранимых настроек)
#define EEPROM_DAWN_MODE_ADDRESS (199U) // адрес в EEPROM памяти для записи времени до "рассвета" #define EEPROM_DAWN_MODE_ADDRESS (199U) // адрес в EEPROM памяти для записи времени до "рассвета"
#define EEPROM_CURRENT_MODE_ADDRESS (200U) // адрес в EEPROM памяти для записи номера текущего эффекта лампы #define EEPROM_CURRENT_MODE_ADDRESS (200U) // адрес в EEPROM памяти для записи номера текущего эффекта лампы
@@ -77,7 +79,7 @@
class EepromManager class EepromManager
{ {
public: public:
static void InitEepromSettings(ModeType modes[], AlarmType alarms[], uint8_t* dawnMode, int8_t* currentMode, static void InitEepromSettings(ModeType modes[], AlarmType alarms[], bool* onFlag, uint8_t* dawnMode, int8_t* currentMode,
void (*readFavoritesSettings)(), void (*saveFavoritesSettings)()) void (*readFavoritesSettings)(), void (*saveFavoritesSettings)())
{ {
// записываем в EEPROM начальное состояние настроек, если их там ещё нет // записываем в EEPROM начальное состояние настроек, если их там ещё нет
@@ -102,6 +104,7 @@ class EepromManager
EEPROM.commit(); EEPROM.commit();
} }
EEPROM.write(EEPROM_LAMP_ON_ADDRESS, 0);
EEPROM.write(EEPROM_DAWN_MODE_ADDRESS, 0); EEPROM.write(EEPROM_DAWN_MODE_ADDRESS, 0);
EEPROM.write(EEPROM_CURRENT_MODE_ADDRESS, 0); EEPROM.write(EEPROM_CURRENT_MODE_ADDRESS, 0);
@@ -124,6 +127,7 @@ class EepromManager
readFavoritesSettings(); readFavoritesSettings();
*onFlag = (bool)EEPROM.read(EEPROM_LAMP_ON_ADDRESS);
*dawnMode = EEPROM.read(EEPROM_DAWN_MODE_ADDRESS); *dawnMode = EEPROM.read(EEPROM_DAWN_MODE_ADDRESS);
*currentMode = EEPROM.read(EEPROM_CURRENT_MODE_ADDRESS); *currentMode = EEPROM.read(EEPROM_CURRENT_MODE_ADDRESS);
} }
@@ -134,12 +138,13 @@ class EepromManager
EEPROM.commit(); EEPROM.commit();
} }
static void HandleEepromTick(bool* settChanged, uint32_t* eepromTimeout, int8_t* currentMode, ModeType modes[], void (*saveFavoritesSettings)()) static void HandleEepromTick(bool* settChanged, uint32_t* eepromTimeout, bool* onFlag, int8_t* currentMode, ModeType modes[], void (*saveFavoritesSettings)())
{ {
if (*settChanged && millis() - *eepromTimeout > EEPROM_WRITE_DELAY) if (*settChanged && millis() - *eepromTimeout > EEPROM_WRITE_DELAY)
{ {
*settChanged = false; *settChanged = false;
*eepromTimeout = millis(); *eepromTimeout = millis();
SaveOnFlag(onFlag);
SaveModesSettings(currentMode, modes); SaveModesSettings(currentMode, modes);
if (EEPROM.read(EEPROM_CURRENT_MODE_ADDRESS) != *currentMode) if (EEPROM.read(EEPROM_CURRENT_MODE_ADDRESS) != *currentMode)
{ {
@@ -157,6 +162,12 @@ class EepromManager
EEPROM.commit(); EEPROM.commit();
} }
static void SaveOnFlag(bool* onFlag)
{
EEPROM.write(EEPROM_LAMP_ON_ADDRESS, *onFlag);
EEPROM.commit();
}
static void SaveDawnMode(uint8_t* dawnMode) static void SaveDawnMode(uint8_t* dawnMode)
{ {
EEPROM.write(EEPROM_DAWN_MODE_ADDRESS, *dawnMode); EEPROM.write(EEPROM_DAWN_MODE_ADDRESS, *dawnMode);

View File

@@ -58,6 +58,10 @@
- Большая оптимизация использования памяти - Большая оптимизация использования памяти
- Исправлена ошибка невключения эффекта "Белый свет" приложением и кнопкой - Исправлена ошибка невключения эффекта "Белый свет" приложением и кнопкой
- Исправлена ошибка неправильного выбора интервала в режиме Избранное в android приложении - Исправлена ошибка неправильного выбора интервала в режиме Избранное в android приложении
--- 16.09.2019
- Добавлено сохранение состояния (вкл/выкл) лампы в EEPROM память
- Добавлен новый эффект белого света (с горизонтальной полосой)
- Реорганизован код, исправлены ошибки
*/ */
// Ссылка для менеджера плат: // Ссылка для менеджера плат:
@@ -68,7 +72,6 @@
#include "Constants.h" #include "Constants.h"
#include <FastLED.h> #include <FastLED.h>
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h> #include <ESP8266WebServer.h>
#include <WiFiManager.h> #include <WiFiManager.h>
#include <WiFiUdp.h> #include <WiFiUdp.h>
@@ -119,7 +122,7 @@ static const uint8_t maxDim = max(WIDTH, HEIGHT);
ModeType modes[MODE_AMOUNT]; ModeType modes[MODE_AMOUNT];
AlarmType alarms[7]; AlarmType alarms[7];
uint8_t dawnOffsets[] = {5, 10, 15, 20, 25, 30, 40, 50, 60};// опции для выпадающего списка параметра "время перед 'рассветом'" (будильник); синхронизировано с android приложением static const uint8_t dawnOffsets[] PROGMEM = {5, 10, 15, 20, 25, 30, 40, 50, 60}; // опции для выпадающего списка параметра "время перед 'рассветом'" (будильник); синхронизировано с android приложением
uint8_t dawnMode; uint8_t dawnMode;
bool dawnFlag = false; bool dawnFlag = false;
long thisTime; long thisTime;
@@ -127,7 +130,7 @@ bool manualOff = false;
int8_t currentMode = 0; int8_t currentMode = 0;
bool loadingFlag = true; bool loadingFlag = true;
bool ONflag = true; bool ONflag = false;
uint32_t eepromTimeout; uint32_t eepromTimeout;
bool settChanged = false; bool settChanged = false;
@@ -237,7 +240,7 @@ void setup()
Udp.begin(localPort); Udp.begin(localPort);
EepromManager::InitEepromSettings( // инициализация EEPROM; запись начального состояния настроек, если их там ещё нет; инициализация настроек лампы значениями из EEPROM EepromManager::InitEepromSettings( // инициализация EEPROM; запись начального состояния настроек, если их там ещё нет; инициализация настроек лампы значениями из EEPROM
modes, alarms, &dawnMode, &currentMode, modes, alarms, &ONflag, &dawnMode, &currentMode,
&(FavoritesManager::ReadFavoritesFromEeprom), &(FavoritesManager::ReadFavoritesFromEeprom),
&(FavoritesManager::SaveFavoritesToEeprom)); &(FavoritesManager::SaveFavoritesToEeprom));
@@ -256,7 +259,8 @@ void loop()
{ {
parseUDP(); parseUDP();
effectsTick(); effectsTick();
EepromManager::HandleEepromTick(&settChanged, &eepromTimeout, &currentMode, modes, &(FavoritesManager::SaveFavoritesToEeprom)); EepromManager::HandleEepromTick(&settChanged, &eepromTimeout, &ONflag,
&currentMode, modes, &(FavoritesManager::SaveFavoritesToEeprom));
#ifdef USE_NTP #ifdef USE_NTP
timeTick(); timeTick();
#endif #endif
@@ -266,7 +270,8 @@ void loop()
#ifdef OTA #ifdef OTA
otaManager.HandleOtaUpdate(); // ожидание и обработка команды на обновление прошивки по воздуху otaManager.HandleOtaUpdate(); // ожидание и обработка команды на обновление прошивки по воздуху
#endif #endif
TimerManager::HandleTimer(&ONflag, &changePower); // обработка событий таймера отключения лампы TimerManager::HandleTimer(&ONflag, &settChanged, // обработка событий таймера отключения лампы
&eepromTimeout, &changePower);
if (FavoritesManager::HandleFavorites( // обработка режима избранных эффектов if (FavoritesManager::HandleFavorites( // обработка режима избранных эффектов
&ONflag, &ONflag,
&currentMode, &currentMode,

View File

@@ -11,6 +11,8 @@ class TimerManager
static void HandleTimer( // функция, обрабатывающая срабатывание таймера, гасит матрицу static void HandleTimer( // функция, обрабатывающая срабатывание таймера, гасит матрицу
bool* ONflag, bool* ONflag,
bool* settChanged,
uint32_t* eepromTimeout,
void (*changePower)()) void (*changePower)())
{ {
if (!TimerManager::TimerHasFired && if (!TimerManager::TimerHasFired &&

View File

@@ -19,6 +19,8 @@ void buttonTick()
ONflag = !ONflag; ONflag = !ONflag;
changePower(); changePower();
} }
settChanged = true;
eepromTimeout = millis();
loadingFlag = true; loadingFlag = true;
} }

View File

@@ -75,6 +75,8 @@ void parseUDP()
{ {
ONflag = true; ONflag = true;
loadingFlag = true; loadingFlag = true;
settChanged = true;
eepromTimeout = millis();
changePower(); changePower();
sendCurrent(); sendCurrent();
} }
@@ -82,6 +84,8 @@ void parseUDP()
else if (!strncmp_P(inputBuffer, PSTR("P_OFF"), 5)) else if (!strncmp_P(inputBuffer, PSTR("P_OFF"), 5))
{ {
ONflag = false; ONflag = false;
settChanged = true;
eepromTimeout = millis();
changePower(); changePower();
sendCurrent(); sendCurrent();
} }