Files
gunner47-GyverLamp/firmware/GyverLamp_v1.4/button.ino

152 lines
4.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifdef ESP_USE_BUTTON
bool brightDirection;
static bool startButtonHolding = false; // флаг: кнопка удерживается для изменения яркости лампы
void buttonTick()
{
touch.tick();
uint8_t clickCount = touch.hasClicks() ? touch.getClicks() : 0U;
if (clickCount == 1U)
{
if (dawnFlag)
{
manualOff = true;
dawnFlag = false;
FastLED.setBrightness(modes[currentMode].Brightness);
changePower();
}
else
{
ONflag = !ONflag;
changePower();
}
settChanged = true;
eepromTimeout = millis();
loadingFlag = true;
#if (USE_MQTT)
if (espMode == 1U)
{
MqttManager::needToPublish = true;
}
#endif
}
if (ONflag && clickCount == 2U)
{
if (++currentMode >= (int8_t)MODE_AMOUNT) currentMode = 0;
FastLED.setBrightness(modes[currentMode].Brightness);
loadingFlag = true;
settChanged = true;
eepromTimeout = millis();
FastLED.clear();
delay(1);
#if (USE_MQTT)
if (espMode == 1U)
{
MqttManager::needToPublish = true;
}
#endif
}
if (ONflag && clickCount == 3U)
{
if (--currentMode < 0) currentMode = MODE_AMOUNT - 1;
FastLED.setBrightness(modes[currentMode].Brightness);
loadingFlag = true;
settChanged = true;
eepromTimeout = millis();
FastLED.clear();
delay(1);
#if (USE_MQTT)
if (espMode == 1U)
{
MqttManager::needToPublish = true;
}
#endif
}
if (clickCount == 4U)
{
#ifdef OTA
if (otaManager.RequestOtaUpdate())
{
ONflag = true;
currentMode = EFF_MATRIX; // принудительное включение режима "Матрица" для индикации перехода в режим обновления по воздуху
FastLED.clear();
delay(1);
changePower();
}
#endif
}
if (clickCount == 5U) // вывод IP на лампу
{
if (espMode == 1U)
{
loadingFlag = true;
while(!fillString(WiFi.localIP().toString().c_str(), CRGB::White)) { delay(1); ESP.wdtFeed(); }
loadingFlag = true;
}
}
if (clickCount == 6U) // вывод текущего времени бегущей строкой
{
printTime(thisTime, true);
}
if (ONflag && clickCount == 7U) // смена рабочего режима лампы: с WiFi точки доступа на WiFi клиент или наоборот
{
espMode = (espMode == 0U) ? 1U : 0U;
EepromManager::SaveEspMode(&espMode);
#ifdef GENERAL_DEBUG
LOG.printf_P(PSTR("Рабочий режим лампы изменён и сохранён в энергонезависимую память\nНовый рабочий режим: ESP_MODE = %d, %s\nРестарт...\n"),
espMode, espMode == 0U ? F("WiFi точка доступа") : F("WiFi клиент (подключение к роутеру)"));
delay(1000);
#endif
showWarning(CRGB::Red, 3000U, 500U); // мигание красным цветом 3 секунды - смена рабочего режима лампы, перезагрузка
ESP.restart();
}
if (ONflag && touch.isHolded())
{
brightDirection = !brightDirection;
startButtonHolding = true;
}
if (ONflag && touch.isStep())
{
uint8_t delta = modes[currentMode].Brightness < 10U // определение шага изменения яркости: при яркости [1..10] шаг = 1, при [11..16] шаг = 3, при [17..255] шаг = 15
? 1U
: 5U;
modes[currentMode].Brightness =
constrain(brightDirection
? modes[currentMode].Brightness + delta
: modes[currentMode].Brightness - delta,
1, 255);
FastLED.setBrightness(modes[currentMode].Brightness);
settChanged = true;
eepromTimeout = millis();
#ifdef GENERAL_DEBUG
LOG.printf_P(PSTR("New brightness value: %d\n"), modes[currentMode].Brightness);
#endif
}
#if (USE_MQTT)
if (espMode == 1U && ONflag && !touch.isHold() && startButtonHolding) // кнопка отпущена после удерживания, нужно отправить MQTT сообщение об изменении яркости лампы
{
MqttManager::needToPublish = true;
startButtonHolding = false;
}
#endif
}
#endif