mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-08 09:20:59 +03:00
Добавлено сохранение состояния (вкл/выкл) лампы в EEPROM память; Минорные изменения android приложения
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -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);
|
||||||
|
@@ -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, ¤tMode,
|
modes, alarms, &ONflag, &dawnMode, ¤tMode,
|
||||||
&(FavoritesManager::ReadFavoritesFromEeprom),
|
&(FavoritesManager::ReadFavoritesFromEeprom),
|
||||||
&(FavoritesManager::SaveFavoritesToEeprom));
|
&(FavoritesManager::SaveFavoritesToEeprom));
|
||||||
|
|
||||||
@@ -256,7 +259,8 @@ void loop()
|
|||||||
{
|
{
|
||||||
parseUDP();
|
parseUDP();
|
||||||
effectsTick();
|
effectsTick();
|
||||||
EepromManager::HandleEepromTick(&settChanged, &eepromTimeout, ¤tMode, modes, &(FavoritesManager::SaveFavoritesToEeprom));
|
EepromManager::HandleEepromTick(&settChanged, &eepromTimeout, &ONflag,
|
||||||
|
¤tMode, 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,
|
||||||
¤tMode,
|
¤tMode,
|
||||||
|
@@ -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 &&
|
||||||
|
@@ -19,6 +19,8 @@ void buttonTick()
|
|||||||
ONflag = !ONflag;
|
ONflag = !ONflag;
|
||||||
changePower();
|
changePower();
|
||||||
}
|
}
|
||||||
|
settChanged = true;
|
||||||
|
eepromTimeout = millis();
|
||||||
loadingFlag = true;
|
loadingFlag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user