mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-08 09:20:59 +03:00
Добавлена функция таймера отключения; исправлены ошибки
This commit is contained in:
@@ -42,6 +42,8 @@
|
||||
--- 10.08.2019
|
||||
- Добавлена точная настройка яркости, скорости и масштаба эффектов
|
||||
- Добавлено взаимодействие с android приложением по управлению будильниками
|
||||
--- 14.08.2019
|
||||
- Добавлена функция таймера отключения
|
||||
*/
|
||||
|
||||
// Ссылка для менеджера плат:
|
||||
@@ -127,6 +129,7 @@ uint8_t AP_STATIC_IP[] = {192, 168, 4, 1}; // статичес
|
||||
#ifdef OTA
|
||||
#include "OtaManager.h"
|
||||
#endif
|
||||
#include "TimerManager.h"
|
||||
|
||||
// --- ИНИЦИАЛИЗАЦИЯ ОБЪЕКТОВ ----------
|
||||
CRGB leds[NUM_LEDS];
|
||||
@@ -168,7 +171,7 @@ struct
|
||||
int16_t time = 0;
|
||||
} alarm[7];
|
||||
|
||||
uint8_t dawnOffsets[] = {5, 10, 15, 20, 25, 30, 40, 50, 60};
|
||||
uint8_t dawnOffsets[] = {5, 10, 15, 20, 25, 30, 40, 50, 60};// опции для выпадающего списка параметра "время перед 'рассветом'" (будильник)
|
||||
uint8_t dawnMode;
|
||||
boolean dawnFlag = false;
|
||||
long thisTime;
|
||||
@@ -179,12 +182,18 @@ boolean loadingFlag = true;
|
||||
boolean ONflag = true;
|
||||
uint32_t eepromTimer;
|
||||
boolean settChanged = false;
|
||||
|
||||
// Конфетти, Огонь, Радуга верт., Радуга гориз., Смена цвета,
|
||||
// Безумие 3D, Облака 3D, Лава 3D, Плазма 3D, Радуга 3D,
|
||||
// Павлин 3D, Зебра 3D, Лес 3D, Океан 3D,
|
||||
|
||||
unsigned char matrixValue[8][16];
|
||||
|
||||
bool TimerManager::TimerRunning = false;
|
||||
bool TimerManager::TimerHasFired = false;
|
||||
uint8_t TimerManager::TimerOption = 1U;
|
||||
uint64_t TimerManager::TimeToFire = 0ULL;
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
@@ -348,6 +357,7 @@ void loop()
|
||||
#ifdef OTA
|
||||
otaManager.HandleOtaUpdate(); // ожидание и обработка команды на обновление прошивки по воздуху
|
||||
#endif
|
||||
TimerManager::HandleTimer(&ONflag, &changePower); // обработка событий таймера отключения лампы
|
||||
ESP.wdtFeed(); // пнуть собаку
|
||||
yield(); // обработать все "служебные" задачи: WiFi подключение и т.д.
|
||||
}
|
||||
|
30
firmware/GyverLamp_v1.4/TimerManager.h
Normal file
30
firmware/GyverLamp_v1.4/TimerManager.h
Normal file
@@ -0,0 +1,30 @@
|
||||
class TimerManager
|
||||
{
|
||||
public:
|
||||
static bool TimerRunning; // флаг "таймер взведён"
|
||||
static bool TimerHasFired; // флаг "таймер отработал"
|
||||
static uint8_t TimerOption; // индекс элемента в списке List Picker'а
|
||||
static uint64_t TimeToFire; // время, в которое должен сработать таймер (millis)
|
||||
|
||||
static void HandleTimer( // функция, обрабатывающая срабатывание таймера, гасит матрицу
|
||||
bool *ONflag,
|
||||
void (*changePower)())
|
||||
{
|
||||
if (!TimerManager::TimerHasFired &&
|
||||
TimerManager::TimerRunning &&
|
||||
millis() >= TimerManager::TimeToFire)
|
||||
{
|
||||
#ifdef GENERAL_DEBUG
|
||||
Serial.printf("Выключение по таймеру\n\n");
|
||||
#endif
|
||||
|
||||
TimerManager::TimerRunning = false;
|
||||
TimerManager::TimerHasFired = true;
|
||||
FastLED.clear();
|
||||
delay(2);
|
||||
FastLED.show();
|
||||
*ONflag = !(*ONflag);
|
||||
changePower();
|
||||
}
|
||||
}
|
||||
};
|
@@ -57,10 +57,6 @@ void effectsTick()
|
||||
|
||||
void changePower()
|
||||
{
|
||||
#ifdef GENERAL_DEBUG
|
||||
Serial.printf("changePower(); brightness: %d\n", modes[currentMode].brightness);
|
||||
#endif
|
||||
|
||||
if (ONflag)
|
||||
{
|
||||
effectsTick();
|
||||
@@ -87,4 +83,7 @@ void changePower()
|
||||
delay(2);
|
||||
FastLED.show();
|
||||
}
|
||||
TimerManager::TimerRunning = false;
|
||||
TimerManager::TimerHasFired = false;
|
||||
TimerManager::TimeToFire = 0ULL;
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@ uint8_t noise[WIDTH][WIDTH];
|
||||
uint8_t noise[HEIGHT][HEIGHT];
|
||||
#endif
|
||||
|
||||
CRGBPalette16 currentPalette( PartyColors_p );
|
||||
CRGBPalette16 currentPalette(PartyColors_p);
|
||||
uint8_t colorLoop = 1;
|
||||
uint8_t ihue = 0;
|
||||
|
||||
|
@@ -132,6 +132,20 @@ void parseUDP()
|
||||
}
|
||||
}
|
||||
|
||||
else if (inputBuffer.startsWith("TMR_GET"))
|
||||
{
|
||||
sendTimer();
|
||||
}
|
||||
|
||||
else if (inputBuffer.startsWith("TMR_SET"))
|
||||
{
|
||||
TimerManager::TimerRunning = inputBuffer.substring(8, 9).toInt();
|
||||
TimerManager::TimerOption = inputBuffer.substring(10, 11).toInt();
|
||||
TimerManager::TimeToFire = millis() + (uint64_t)(inputBuffer.substring(12).toInt() * 1000);
|
||||
TimerManager::TimerHasFired = false;
|
||||
sendTimer();
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
inputBuffer = "";
|
||||
@@ -184,6 +198,8 @@ void sendCurrent()
|
||||
inputBuffer += "0";
|
||||
#endif
|
||||
inputBuffer += " ";
|
||||
inputBuffer += String((uint8_t)TimerManager::TimerRunning);
|
||||
inputBuffer += " ";
|
||||
#ifdef USE_NTP
|
||||
inputBuffer += timeClient.getFormattedTime();
|
||||
#else
|
||||
@@ -208,3 +224,14 @@ void sendAlarms()
|
||||
}
|
||||
inputBuffer += (dawnMode + 1);
|
||||
}
|
||||
|
||||
void sendTimer()
|
||||
{
|
||||
inputBuffer = "TMR";
|
||||
inputBuffer += " ";
|
||||
inputBuffer += String((uint8_t)TimerManager::TimerRunning);
|
||||
inputBuffer += " ";
|
||||
inputBuffer += String(TimerManager::TimerOption);
|
||||
inputBuffer += " ";
|
||||
inputBuffer += String(TimerManager::TimerRunning ? (uint16_t)floor((TimerManager::TimeToFire - millis()) / 1000) : 0);
|
||||
}
|
||||
|
Reference in New Issue
Block a user