From 0e7f743bc8a2e0c19986d8965e7125bf14d576e2 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 2 Mar 2021 02:50:05 +0300 Subject: [PATCH] v0.20b --- firmware/GyverLamp2/GyverLamp2.ino | 17 ++++++++++++----- firmware/GyverLamp2/analog.ino | 4 ++-- firmware/GyverLamp2/effects.ino | 19 +++++++++++++------ firmware/GyverLamp2/parsing.ino | 6 +++--- firmware/GyverLamp2/presetManager.ino | 2 +- firmware/GyverLamp2/startup.ino | 2 +- firmware/GyverLamp2/time.ino | 2 +- 7 files changed, 33 insertions(+), 19 deletions(-) diff --git a/firmware/GyverLamp2/GyverLamp2.ino b/firmware/GyverLamp2/GyverLamp2.ino index c7edf09..65ba484 100644 --- a/firmware/GyverLamp2/GyverLamp2.ino +++ b/firmware/GyverLamp2/GyverLamp2.ino @@ -1,4 +1,10 @@ /* + Версия 0.20b + Оптимизация + Исправление критических ошибок + Пофикшено падение АР + Пофикшено падение лампы во время светомузыки + Версия 0.19b Минимальная версия приложения 1.17!!! Почищен мусор, оптимизация, повышена стабильность и производительность @@ -63,8 +69,9 @@ // ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ! // ДЛЯ КОМПИЛЯЦИИ ПРОШИВКИ ПОД NODEMCU/WEMOS/ESP01/ESP12 ВЫБИРАТЬ -// Инструменты/Плата Generic ESP8266 -// Инструменты/Flash Size 4MB (FS:2MB OTA) +// Инструменты / Плата Generic ESP8266 +// Инструменты / Flash Size 4MB (FS:2MB OTA) +// CPU Frequency / 160 MHz (рекомендуется для стабильности светомузыки!!!) // При прошивке с других прошивок лампы поставить: Инструменты/Erase Flash/All Flash Contents // ESP core 2.7.4+ http://arduino.esp8266.com/stable/package_esp8266com_index.json // FastLED 3.4.0+ https://github.com/FastLED/FastLED/releases @@ -101,9 +108,9 @@ const char AP_NameChar[] = "GyverLamp2"; const char WiFiPassword[] = "12345678"; // ------------ Прочее ------------- -#define GL_VERSION 19 // код версии прошивки +#define GL_VERSION 20 // код версии прошивки #define EE_TOUT 30000 // таймаут сохранения епром после изменения, мс -#define DEBUG_SERIAL // закомментируй чтобы выключить отладку (скорость 115200) +//#define DEBUG_SERIAL // закомментируй чтобы выключить отладку (скорость 115200) #define EE_KEY 55 // ключ сброса WiFi (измени для сброса всех настроек) #define NTP_UPD_PRD 5 // период обновления времени с NTP сервера, минут //#define SKIP_WIFI // пропустить подключение к вафле (для отладки) @@ -120,7 +127,7 @@ const char WiFiPassword[] = "12345678"; //#define STRIP_PIN 5 // GPIO5 на gl module (D1 на wemos/node) // ---------- БИБЛИОТЕКИ ----------- -#define FASTLED_ALLOW_INTERRUPTS 0 +//#define FASTLED_ALLOW_INTERRUPTS 0 #include "data.h" // данные #include "Time.h" // часы #include "TimeRandom.h" // случайные числа по времени diff --git a/firmware/GyverLamp2/analog.ino b/firmware/GyverLamp2/analog.ino index f693119..e63b4e7 100644 --- a/firmware/GyverLamp2/analog.ino +++ b/firmware/GyverLamp2/analog.ino @@ -5,7 +5,7 @@ void setupADC() { vol.setDt(700); vol.setPeriod(5); - vol.setWindow(map(MAX_LEDS, 300, 1200, 20, 1)); + vol.setWindow(map(MAX_LEDS, 300, 900, 20, 1)); low.setDt(0); low.setPeriod(0); @@ -63,11 +63,11 @@ void checkAnalog() { void checkMusic() { vol.tick(); + yield(); #if (USE_CLAP == 1) clap.tick(vol.getRawMax()); if (clap.hasClaps(2)) controlHandler(!cfg.state); #endif - yield(); if (CUR_PRES.advMode == GL_ADV_LOW || CUR_PRES.advMode == GL_ADV_HIGH) { // частоты int raw[FFT_SIZE], spectr[FFT_SIZE]; for (int i = 0; i < FFT_SIZE; i++) raw[i] = analogRead(A0); diff --git a/firmware/GyverLamp2/effects.ino b/firmware/GyverLamp2/effects.ino index 85e6cce..f0db9b1 100644 --- a/firmware/GyverLamp2/effects.ino +++ b/firmware/GyverLamp2/effects.ino @@ -19,12 +19,15 @@ void effectsRoutine() { byte thisScale = getScale(); byte thisBright = getBright(); - if (cfg.adcMode > 1) { // музыка или яркость + if (musicMode() || briMode()) { // музыка или яркость if (cfg.role) { // мастер отправляет - static timerMillis adcSend(120, true); - if (adcSend.isReady() && millis() - udpTmr >= 1000) sendUDP(7, thisLength, thisScale, thisBright); + static uint32_t tmr = 0; + if ((millis() - tmr >= musicMode() ? 120 : 1000) && millis() - udpTmr >= 1000) { + sendUDP(7, thisLength, thisScale, thisBright); + tmr = millis(); + } } else { // слейв получает - if (millis() - gotADCtmr < 2000) { // есть сигнал с мастера + if (millis() - gotADCtmr < 4000) { // есть сигнал с мастера thisLength = udpLength; thisScale = udpScale; thisBright = udpBright; @@ -46,6 +49,7 @@ void effectsRoutine() { prevEff = CUR_PRES.effect; loading = true; } + yield(); // =================================================== ЭФФЕКТЫ =================================================== switch (CUR_PRES.effect) { @@ -217,7 +221,7 @@ void effectsRoutine() { case 9: // =================================== ЧАСЫ =================================== FastLED.clear(); drawClock(mapFF(CUR_PRES.scale, 0, cfg.length - 7), (255 - CUR_PRES.speed), CHSV(CUR_PRES.color, 255, 255)); - break; + break; case 10: // ================================= ПОГОДА ================================== @@ -236,13 +240,16 @@ void effectsRoutine() { bool musicMode() { return ((cfg.adcMode == GL_ADC_MIC || cfg.adcMode == GL_ADC_BOTH) && (CUR_PRES.advMode > 1 && CUR_PRES.advMode <= 4)); } +bool briMode() { + return (cfg.adcMode == GL_ADC_BRI || cfg.adcMode == GL_ADC_BOTH); +} byte getBright() { int maxBr = cfg.bright; // макс яркость из конфига byte fadeBr = 255; if (CUR_PRES.fadeBright) fadeBr = CUR_PRES.bright; // ограничен вручную - if (cfg.adcMode == GL_ADC_BRI || cfg.adcMode == GL_ADC_BOTH) { // ----> датчик света или оба + if (briMode()) { // ----> датчик света или оба maxBr = constrain(phot.getFil(), cfg.minLight, cfg.maxLight); if (cfg.minLight != cfg.maxLight) maxBr = map(maxBr, cfg.minLight, cfg.maxLight, cfg.minBright, cfg.maxBright); diff --git a/firmware/GyverLamp2/parsing.ino b/firmware/GyverLamp2/parsing.ino index c6759e9..1463ead 100644 --- a/firmware/GyverLamp2/parsing.ino +++ b/firmware/GyverLamp2/parsing.ino @@ -1,6 +1,6 @@ +char buf[UDP_TX_PACKET_MAX_SIZE + 1]; void parsing() { if (Udp.parsePacket()) { - static char buf[UDP_TX_PACKET_MAX_SIZE + 1]; int n = Udp.read(buf, UDP_TX_PACKET_MAX_SIZE); buf[n] = NULL; @@ -27,7 +27,7 @@ void parsing() { // ПАРСИНГ byte data[MAX_PRESETS * PRES_SIZE + 10]; - memset(data, 0, sizeof(data)); + memset(data, 0, MAX_PRESETS * PRES_SIZE + 10); int count = 0; char *str, *p = buf; char *ssid, *pass; @@ -53,7 +53,6 @@ void parsing() { if (count == 24) strcpy(cfg.mqttPass, str); } } - yield(); // тип 0 - control, 1 - config, 2 - effects, 3 - dawn, 4 - from master, 5 - palette, 6 - time switch (data[1]) { @@ -93,6 +92,7 @@ void parsing() { case 13: // выключить через if (data[3] == 0) turnoffTmr.stop(); else { + DEBUGLN("Fade"); fadeDown((uint32_t)data[3] * 60000ul); } break; diff --git a/firmware/GyverLamp2/presetManager.ino b/firmware/GyverLamp2/presetManager.ino index 4955f24..1fc7727 100644 --- a/firmware/GyverLamp2/presetManager.ino +++ b/firmware/GyverLamp2/presetManager.ino @@ -68,7 +68,7 @@ void setPower(bool state) { FastLED.clear(); FastLED.show(); } - if (millis() - udpTmr >= 1000) sendToSlaves(0, cfg.state); // пиздец костыль + if (millis() - udpTmr >= 1000) sendToSlaves(0, cfg.state); // пиздец костыль (не отправлять слейвам если команда получена по воздуху) DEBUGLN(state ? "Power on" : "Power off"); } diff --git a/firmware/GyverLamp2/startup.ino b/firmware/GyverLamp2/startup.ino index 52bf313..698b4ff 100644 --- a/firmware/GyverLamp2/startup.ino +++ b/firmware/GyverLamp2/startup.ino @@ -164,7 +164,7 @@ void checkUpdate() { DEBUGLN(GL_VERSION); } else { blink16(CRGB::Blue); - DEBUG("Update to current"); + DEBUGLN("Update to current"); } cfg.update = 0; EE_updCfg(); diff --git a/firmware/GyverLamp2/time.ino b/firmware/GyverLamp2/time.ino index e6dff8e..c1c6fcc 100644 --- a/firmware/GyverLamp2/time.ino +++ b/firmware/GyverLamp2/time.ino @@ -12,7 +12,7 @@ void setupTime() { void timeTicker() { static timerMillis tmr(30, true); if (tmr.isReady()) { - if (cfg.WiFimode && WiFi.status() == WL_CONNECTED) { // если вайфай подключен + if (cfg.WiFimode && WiFi.status() == WL_CONNECTED && !connTmr.running()) { // если вайфай подключен и это не попытка переподключиться now.sec = ntp.getSeconds(); now.min = ntp.getMinutes(); now.hour = ntp.getHours();