From 88871ce24c0ef4e2640cc893bfdfc267eaae153b Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Sat, 6 Jan 2024 16:31:01 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5:=20=D0=B2=D0=BE=D1=81=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=B2=D0=BB=D0=B8=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=20=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BC=D0=B8=D0=BA=D1=80?= =?UTF-8?q?=D0=BE=D1=84=D0=BE=D0=BD=D0=B0=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #19 --- src/interface.cpp | 2 -- src/lamp.cpp | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/interface.cpp b/src/interface.cpp index 60538f17..b53adc45 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -883,8 +883,6 @@ void set_settings_mic(Interface *interf, const JsonObject *data, const char* act void set_micflag(Interface *interf, const JsonObject *data, const char* action){ if (!data) return; myLamp.setMicOnOff((*data)[TCONST_Mic]); - myLamp.save_flags(); - //publish_effect_controls(interf, data, NULL); } void set_settings_mic_calib(Interface *interf, const JsonObject *data, const char* action){ diff --git a/src/lamp.cpp b/src/lamp.cpp index b9d4a1ee..8e9e0fd5 100644 --- a/src/lamp.cpp +++ b/src/lamp.cpp @@ -107,6 +107,9 @@ void Lamp::lamp_init() } else { flags.ONflag = false; } + + // restore mike on/off state + setMicOnOff(flags.isMicOn); } void Lamp::handle(){ @@ -364,6 +367,7 @@ void Lamp::setMicOnOff(bool val) { if(foundc7){ // был найден 7 контрол, но не микрофон effwrkr.setDynCtrl(controls[foundc7].get()); } + save_flags(); } #endif // MIC_EFFECTS From 27eb4a9ae623c8d8d557e5f15ace158342a8544a Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Sat, 6 Jan 2024 18:18:54 +0900 Subject: [PATCH 2/3] removed build_time define MIC_EFFECTS from now on microphone feature is always build-in --- include/config.h | 2 - include/user_config.h.default | 9 +- src/actions.hpp | 2 - src/effects.cpp | 192 ++++++---------------------------- src/effects.h | 5 +- src/effects_types.h | 6 +- src/effectworker.cpp | 13 +-- src/effectworker.h | 16 +-- src/enc.cpp | 26 +---- src/interface.cpp | 76 ++------------ src/interface.h | 2 - src/lamp.cpp | 17 +-- src/lamp.h | 14 +-- 13 files changed, 56 insertions(+), 324 deletions(-) diff --git a/include/config.h b/include/config.h index 5abb44a1..b42a02b7 100644 --- a/include/config.h +++ b/include/config.h @@ -60,8 +60,6 @@ JeeUI2 lib used under MIT License Copyright (c) 2019 Marsel Akhkamov //----------------------------------- //#define ESP_USE_BUTTON // если строка не закомментирована, должна быть подключена кнопка (иначе ESP может регистрировать "фантомные" нажатия и некорректно устанавливать яркость) //#define LAMP_DEBUG // режим отладки, можно также включать в platformio.ini -//#define DEBUG_TELNET_OUTPUT (true) // true - отладочные сообщения будут выводиться в telnet вместо Serial порта (для удалённой отладки без подключения usb кабелем) // Deprecated -//#define MIC_EFFECTS // Включить использование микрофона для эффектов //#define MP3PLAYER // Включить использование MP3 плеера (DF Player) //----------------------------------- #ifndef LANG_FILE diff --git a/include/user_config.h.default b/include/user_config.h.default index 3a95509d..1b16b4ab 100644 --- a/include/user_config.h.default +++ b/include/user_config.h.default @@ -68,7 +68,6 @@ https://github.com/vortigont/FireLamp_JeeUI/wiki/%D0%9D%D0%B0%D0%B7%D0%BD%D0%B0% //------------------------------ Подключаемое дополнительное оборудование #define ESP_USE_BUTTON // если строка не закомментирована, должна быть подключена кнопка (иначе ESP может регистрировать "фантомные" нажатия и некорректно устанавливать яркость) -//#define MIC_EFFECTS // Включить использование микрофона для эффектов //#define MP3PLAYER // Включить использование MP3 плеера (DF Player) //#define ENCODER // Использовать Энкодер @@ -118,11 +117,9 @@ https://github.com/vortigont/FireLamp_JeeUI/wiki/%D0%9D%D0%B0%D0%B7%D0%BD%D0%B0% #endif //#define MIC_PIN (-1) // пин для микрофона -#ifdef MIC_EFFECTS -#define MIC_POLLRATE (100U) // как часто опрашиваем микрофон, мс -#define FAST_ADC_READ // микрофон, использовать полный диапазон звуковых частот, если закомментировано, то будет до 5кГц, но сэкономит память и проще обсчитать... -#define SAMPLING_FREQ (18000U*2U) -#endif +//#define MIC_POLLRATE (100U) // как часто опрашиваем микрофон, мс +//#define FAST_ADC_READ // микрофон, использовать полный диапазон звуковых частот, если закомментировано, то будет до 5кГц, но сэкономит память и проще обсчитать... +//#define SAMPLING_FREQ (18000U*2U) // RTC НЕ ПОДДЕРЖИВАЕТСЯ diff --git a/src/actions.hpp b/src/actions.hpp index 19223d52..2740e85e 100644 --- a/src/actions.hpp +++ b/src/actions.hpp @@ -169,14 +169,12 @@ void run_action(ra act, const T& param) { break; } -#ifdef MIC_EFFECTS // simple actions with provided key:value case ra::miconoff : { obj[P_action] = TCONST_Mic; data[TCONST_Mic] = param; break; } -#endif //#ifdef MIC_EFFECTS #ifdef MP3PLAYER //MP3: enable/disable diff --git a/src/effects.cpp b/src/effects.cpp index 4bf1d3e2..5cd184eb 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -66,23 +66,19 @@ String EffectSparcles::setDynCtrl(UIControl*_val){ bool EffectSparcles::sparklesRoutine() { -#ifdef MIC_EFFECTS uint8_t mic = getMicMapMaxPeak(); uint8_t mic_f = map(getMicMapFreq(), LOW_FREQ_MAP_VAL, HI_FREQ_MAP_VAL, 0, 255); if (isMicOn() && eff > 5) fb->fade(255 - mic); fb->fade(isMicOn() ? map(scale, 1, 255, 100, 1) : map(scale, 1, 255, 50, 1)); -#else - fb->fade(map(scale, 1, 255, 1, 50)); -#endif CHSV currentHSV; for (uint8_t i = 0; i < (uint8_t)round(2.5 * (speed / 255.0) + 1); i++) { uint8_t x = random8(0U, fb->w()); uint8_t y = random8(0U, fb->h()); -#ifdef MIC_EFFECTS + switch (eff) { case 1 : @@ -107,17 +103,13 @@ bool EffectSparcles::sparklesRoutine() break; } -#endif + if (!fb->at(x, y)) { -#ifdef MIC_EFFECTS if (isMicOn()) { currentHSV = CHSV(mic_f, 255U - getMicMapMaxPeak()/3, constrain(mic * 1.25f, 48, 255)); } else currentHSV = CHSV(random8(1U, 255U), random8(192U, 255U), random8(192U, 255U)); -#else - currentHSV = CHSV(random8(1U, 255U), random8(192U, 255U), random8(192U, 255U)); -#endif fb->at(x, y) = currentHSV; } } @@ -141,13 +133,9 @@ bool EffectWhiteColorStripe::whiteColorStripeRoutine() { fb->clear(); -#ifdef MIC_EFFECTS byte _scale = isMicOn() ? (256.0/getMicMapMaxPeak()+0.3)*scale : scale; byte _speed = isMicOn() ? (256.0/getMicMapFreq()+0.3)*speed : speed; -#else - byte _scale = scale; - byte _speed = speed; -#endif + if(_scale < 126){ uint8_t centerY = fb->maxHeightIndex() / 2U; for (int16_t y = centerY; y >= 0; y--) @@ -267,13 +255,9 @@ bool EffectPulse::run() { palette = RainbowColors_p; uint8_t _scale = scale; -#ifdef MIC_EFFECTS + #define FADE 255U - (isMicOn() ? getMicMapMaxPeak()*2 : 248U) // (isMicOn() ? 300U - getMicMapMaxPeak() : 5U) #define BLUR (isMicOn() ? getMicMapMaxPeak()/3 : 10U) //(isMicOn() ? map(getMicMapMaxPeak(), 1, 255, 1, 30) : 10U) -#else - #define FADE 1U - #define BLUR 10U -#endif //fb->fade(FADE); if (pulse_step <= currentRadius) { @@ -336,14 +320,11 @@ bool EffectPulse::run() { bool EffectRainbow::run(){ // коэф. влияния замаплен на скорость, 4 ползунок нафиг не нужен hue += (6.0 * (speed / 255.0) + 0.05 ); // скорость смещения цвета зависит от кривизны наклна линии, коэф. 6.0 и 0.05 -#ifdef MIC_EFFECTS + micCoef = (getMicMapMaxPeak() > map(speed, 1, 255, 100, 10) and isMicOn() ? getMicMapMaxPeak() : 100.0)/100.0; twirlFactor = EffectMath::fmap((float)scale, 85, 170, 8.3, 24); // на сколько оборотов будет закручена матрица, [0..3] twirlFactor *= getMicMapMaxPeak() > map(speed, 1, 255, 80, 10) and isMicOn() ? 1.5f * ((float)getMicMapFreq() / 255.0f) : 1.0f; -#else - twirlFactor = EffectMath::fmap((float)scale, 85, 170, 8.3, 24); // на сколько оборотов будет закручена матрица, [0..3] - micCoef = 1.0; -#endif + if(scale<85){ return rainbowHorVertRoutine(false); } else if (scale>170){ @@ -411,15 +392,15 @@ bool EffectColors::colorsRoutine() if(step!=delay) { -#ifdef MIC_EFFECTS uint16_t mmf = getMicMapFreq(); uint16_t mmp = getMicMapMaxPeak(); - -#if defined(LAMP_DEBUG) && defined(MIC_EFFECTS) +/* +#if defined(LAMP_DEBUG) EVERY_N_SECONDS(1){ LOG(printf_P,PSTR("MF: %5.2f MMF: %d MMP: %d scale %d speed: %d\n"), getMicFreq(), mmf, mmp, scale, speed); } #endif +*/ if(isMicOn()){ // включен микрофон if(scale>=127){ @@ -468,9 +449,7 @@ EVERY_N_SECONDS(1){ fb->fill(CHSV(ihue, 255U, 255U)); } } -#else - fb->fill(CHSV(ihue, 255U, 255U)); -#endif + } else { ihue += scale; // смещаемся на следущий } @@ -1004,15 +983,10 @@ String Effect3DNoise::setDynCtrl(UIControl*_val) { } bool Effect3DNoise::run(){ - #ifdef MIC_EFFECTS uint8_t mmf = isMicOn() ? getMicMapFreq() : 0; uint8_t mmp = isMicOn() ? getMicMapMaxPeak() : 0; _scale = (NOISE_SCALE_AMP*(float)scale/255.0+NOISE_SCALE_ADD)*(mmf>0?(1.5*mmf/255.0):1); _speed = NOISE_SCALE_AMP*(float)speed/512.0*(mmfMIN_PEAK_LEVEL?10:2.5*mmp/255.0+1); - #else - _scale = NOISE_SCALE_AMP*scale/255.0+NOISE_SCALE_ADD; - _speed = NOISE_SCALE_AMP*speed/512.0; - #endif fillNoiseLED(); return true; @@ -2190,9 +2164,7 @@ bool EffectFire2012::run() { } if (dryrun(4.0)) return false; -#ifdef MIC_EFFECTS cooling = isMicOn() ? 255 - getMicMapMaxPeak() : 130; -#endif return fire2012Routine(); } @@ -2244,12 +2216,8 @@ bool EffectFire2018::run() uint16_t ctrl = ((ctrl1 + ctrl2) / 2); // parameters for the heatmap -#ifndef MIC_EFFECTS - uint16_t _speed = isLinSpeed ? speed : beatsin88(map(speed, 1, 255, 80, 200), 5, map(speed, 1, 255, 10, 255)); // speed пересекается с переменной в родительском классе -#else byte mic_p = getMicMapMaxPeak(); uint16_t _speed = isMicOn() ? (mic_p > map(speed, 1, 255, 225, 20) ? mic_p : 20) : (isLinSpeed ? map(speed, 1, 255, 20, 100) : beatsin88(map(speed, 1, 255, 80, 200), 5, map(speed, 1, 255, 10, 255))); // speed пересекается с переменной в родительском классе -#endif // shift error values for (auto &i : noise.opt){ @@ -3101,15 +3069,10 @@ void EffectLeapers::load() { void EffectLeapers::restart_leaper(Leaper &l) { // leap up and to the side with some random component -#ifdef MIC_EFFECTS uint8_t mic = getMicMaxPeak(); uint8_t rand = random(5, 50 + _rv * 4); l.xd = static_cast(isMicOn() ? 25 + mic : rand) / 100.0; l.yd = static_cast(isMicOn() ? 25 + mic : rand) / 50.0; -#else - l.xd = static_cast(random8(5, 50 + _rv * 4)) / 100; - l.yd = static_cast(random8(5, 100 + _rv * 3)) / 50; -#endif // for variety, sometimes go 20% faster if (random8() < 12) { @@ -3429,9 +3392,7 @@ String EffectWhirl::setDynCtrl(UIControl*_val){ } bool EffectWhirl::whirlRoutine() { -#ifdef MIC_EFFECTS micPick = isMicOn() ? getMicMaxPeak() : 0; -#endif fb->fade(15. * speedFactor); for (auto &boid : boids){ @@ -3443,15 +3404,12 @@ bool EffectWhirl::whirlRoutine() { boid.velocity.x = ((float)sin8(angle) * 0.0078125 - speedFactor); boid.velocity.y = -((float)cos8(angle) * 0.0078125 - speedFactor); boid.update(); -#ifdef MIC_EFFECTS + if (!isMicOn()) EffectMath::drawPixelXYF(boid.location.x, boid.location.y, ColorFromPalette(*curPalette, angle + (uint8_t)hue), fb); // + hue постепенно сдвигает палитру по кругу else EffectMath::drawPixelXYF(boid.location.x, boid.location.y, CHSV(getMicMapFreq(), 255-micPick, constrain(micPick * EffectMath::fmap(scale, 1.0f, 255.0f, 1.25f, 5.0f), 48, 255)), fb); // + hue постепенно сдвигает палитру по кругу -#else - EffectMath::drawPixelXYF(boid.location.x, boid.location.y, ColorFromPalette(*curPalette, angle + (uint8_t)hue), fb); // + hue постепенно сдвигает палитру по кругу -#endif if (boid.location.x < 0 || boid.location.x >= fb->w() || boid.location.y < 0 || boid.location.y >= fb->h()) { boid.location.x = EffectMath::randomf(0, fb->w()); boid.location.y = 0; @@ -3546,11 +3504,8 @@ void EffectAquarium::fillNoiseLED() { } bool EffectAquarium::run() { -#ifdef MIC_EFFECTS byte _video = isMicOn() ? constrain(getMicMaxPeak() * EffectMath::fmap(scale, 1.0f, 255.0f, 1.25f, 5.0f), 48U, 255U) : 255; -#else - byte _video = 255; -#endif + switch (glare) { // case 2: nGlare(_video); @@ -3559,24 +3514,6 @@ bool EffectAquarium::run() { nDrops(_video); } -/* абсолютно непонятная одноцветная заливка - if (!glare) {// если блики выключены - for (byte x = 0; x < fb->w(); x++) - for (byte y = 0U; y < fb->h(); y++) - { -#ifdef MIC_EFFECTS - if (isMicOn()) { - hue = getMicMapFreq(); - EffectMath::drawPixelXY(x, y, CHSV((uint8_t)hue, satur, _video)); - } - else - EffectMath::drawPixelXY(x, y, CHSV((uint8_t)hue, satur, 255U)); -#else - EffectMath::drawPixelXY(x, y, CHSV((uint8_t)hue, satur, 255U)); -#endif - } - } -*/ if (speed == 1) { hue = scale; } @@ -3633,7 +3570,6 @@ void EffectStar::drawStar(float xlocl, float ylocl, float biggy, float little, i ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128)); */ // TODO: have no idea why all calculations were done using floats, but drawing is done with ints, looks like Kostyamat's implementation -#ifdef MIC_EFFECTS EffectMath::drawLine( static_cast(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128)), static_cast(ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128)), static_cast(xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128)), @@ -3646,31 +3582,13 @@ void EffectStar::drawStar(float xlocl, float ylocl, float biggy, float little, i static_cast(ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128)), isMicOn() ? CHSV(koler+getMicMapFreq(), 255-micPick, constrain(micPick * EffectMath::fmap(scale, 1.0f, 255.0f, 1.25f, 5.0f), 48, 255)) : ColorFromPalette(*curPalette, koler), fb); -#else - EffectMath::drawLine( static_cast(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128)), - static_cast(ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128)), - static_cast(xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128)), - static_cast(ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128)), - ColorFromPalette(*curPalette, koler), - fb); - EffectMath::drawLine( static_cast(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128)), - static_cast(ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128)), - static_cast(xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128)), - static_cast(ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128)), - ColorFromPalette(*curPalette, koler), - fb); -#endif } } bool EffectStar::run() { -#ifdef MIC_EFFECTS micPick = getMicMaxPeak(); fb->fade(255U - (isMicOn() ? micPick*2 : 90)); // работает быстрее чем dimAll -#else - fb->fade(165); -#endif _speedFactor = ((float)speed/380.0+0.05); @@ -3701,11 +3619,9 @@ bool EffectStar::run() { s.cntdelay = counter + (stars.size() << 1) + 1U; // задержка следующего пуска звезды } } -#ifdef MIC_EFFECTS + EffectMath::blur2d(fb, isMicOn() ? micPick/2 : 30U); //fadeToBlackBy() сам блурит, уменьшил блур под микрофон -#else - EffectMath::blur2d(fb, 30U); -#endif + return true; } @@ -4004,15 +3920,11 @@ bool EffectPacific::run() return true; } -#ifdef MIC_EFFECTS //----- Эффект "Осциллограф" (c) kostyamat // !++ String EffectOsc::setDynCtrl(UIControl*_val) { -#ifdef ESP32 pointer = 4096/(getMicScale()*2); -#else - pointer = 1024/(getMicScale()*2); -#endif + if(_val->getId()==1) { speed = EffectCalc::setDynCtrl(_val).toInt(); if (speed <= 127) { @@ -4068,7 +3980,6 @@ bool EffectOsc::run() { return true; } -#endif // ------ Эффект "Вышиванка" (с) проект Aurora "Munch" void EffectMunch::load() { @@ -4118,11 +4029,8 @@ bool EffectMunch::munchRoutine() { } generation++; -#ifdef MIC_EFFECTS mic[1] = isMicOn() ? map(getMicMapMaxPeak(), 0, 255, 0, minDimLocal) : minDimLocal; -#else - mic[1] = minDimLocal; -#endif + return true; } @@ -4403,13 +4311,10 @@ bool EffectShadows::run() { uint8_t sat8 = beatsin88( 87, 220, 250); uint8_t brightdepth = beatsin88( 341, 96, 224); uint16_t brightnessthetainc16 = beatsin88( 203, (25 * 225), (40 * 256)); -#ifdef MIC_EFFECTS + uint8_t msmultiplier = isMicOn() ? getMicMapMaxPeak() : linear? beatsin88(map(speed, 1, 255, 100, 255), 32, map(speed, 1, 255, 60, 255)) : speed; // beatsin88(147, 32, 60); byte effectBrightness = isMicOn() ? getMicMapMaxPeak() * 1.5f : scale; -#else - uint8_t msmultiplier = linear ? beatsin88(map(speed, 1, 255, 100, 255), 32, map(speed, 1, 255, 60, 255)) : speed; // beatsin88(147, 32, 60); - byte effectBrightness = scale; -#endif + uint16_t hue16 = sHue16;//gHue * 256; uint16_t hueinc16 = beatsin88(113, 1, 3000); @@ -5042,11 +4947,9 @@ String EffectSnake::setDynCtrl(UIControl*_val) { bool EffectSnake::run() { fb->fade(speed<25 ? 5 : speed/2 ); // длина хвоста будет зависеть от скорости -#ifdef MIC_EFFECTS + hue+=(speedFactor/snakes.size()+(isMicOn() ? getMicMapFreq()/127.0 : 0)); -#else - hue+=speedFactor/snakes.size(); -#endif + hue = hue>255? hue-255 : hue; int i = 0; @@ -5061,17 +4964,11 @@ bool EffectSnake::run() { } snake.shuffleDown(speedFactor, subPix); -#ifdef MIC_EFFECTS if(getMicMapMaxPeak()>speed/3.0+75.0 && isMicOn()) { snake.newDirection(); } else if (random((speed<25)?speed*50:speed*10) < speed && !isMicOn()) {// как часто будут повороты :), логика загадочная, но на малой скорости лучше змейкам круги не наматывать :) snake.newDirection(); } -#else - if (random((speed<25)?speed*50:speed*10) < speed){ // как часто будут повороты :), логика загадочная, но на малой скорости лучше змейкам круги не наматывать :) - snake.newDirection(); - } -#endif snake.move(speedFactor, fb->w(), fb->h()); snake.draw(colors, i, subPix, fb, false /*isDebug()*/); @@ -6440,17 +6337,11 @@ void EffectFairy::fountEmit(TObject &i) { if(random8(2U)) i.speedY=-i.speedY; i.state = EffectMath::randomf(50, 250); -#ifdef MIC_EFFECTS if (type) i.hue = isMicOn() ? getMicMapFreq() : hue2; else i.hue = random8(getMicMapFreq(), 255); -#else - if (type) - i.hue = hue2; - else - i.hue = random8(255); -#endif + i.isShift = true; } @@ -6587,9 +6478,7 @@ bool EffectFairy::fairy() { } bool EffectFairy::run() { -#ifdef MIC_EFFECTS - _video = isMicOn() ? constrain(getMicMaxPeak() * EffectMath::fmap(gain, 1.0f, 255.0f, 1.25f, 5.0f), 48U, 255U) : 255; -#endif + _video = isMicOn() ? constrain(getMicMaxPeak() * EffectMath::fmap(gain, 1.0f, 255.0f, 1.25f, 5.0f), 48U, 255U) : 255; switch (effect) { @@ -6698,19 +6587,15 @@ void EffectCircles::drawCircle(LedFB *fb, Circle &circle) { } bool EffectCircles::run() { -#ifdef MIC_EFFECTS _video = isMicOn() ? constrain(getMicMaxPeak() * EffectMath::fmap(gain, 1.0f, 255.0f, 1.25f, 5.0f), 48U, 255U) : 255; -#endif + randomSeed(millis()); fb->clear(); for (auto &i : circles){ i.bpm += speedFactor; if (i.radius() < 0.001) { -#ifdef MIC_EFFECTS i.hue = isMicOn() ? getMicMapFreq() : random(0, fb->w()) * 255 / circles.size(); -#else - i.hue = random(0, fb->w()) * 255 / circles.size(); -#endif + move(i); } drawCircle(fb, i); @@ -7621,7 +7506,6 @@ bool EffectFlags::run() { return true; } -#ifdef MIC_EFFECTS /* -------------- эффект "VU-Meter" (c) G6EJD, https://www.youtube.com/watch?v=OStljy_sUVg&t=0s reworked by s-marley https://github.com/s-marley/ESP32_FFT_VU @@ -7655,10 +7539,9 @@ String EffectVU::setDynCtrl(UIControl*_val){ } void EffectVU::load() { -#ifdef MIC_EFFECTS setMicAnalyseDivider(0); // отключить авто-работу микрофона, т.к. тут все анализируется отдельно, т.е. не нужно выполнять одну и ту же работу дважды mw = new MicWorker(getMicScale(),getMicNoise(), true); -#endif + bands = effId & 01 ? (fb->w()/2 + (fb->w() & 01 ? 1:0)) : fb->w(); bar_width = (fb->w() / (bands - 1)); @@ -7670,14 +7553,8 @@ void EffectVU::load() { } bool EffectVU::run() { -//#ifdef MIC_EFFECTS - // уже отключили в load() -// setMicAnalyseDivider(0); // отключить авто-работу микрофона, т.к. тут все анализируется отдельно, т.е. не нужно выполнять одну и ту же работу дважды -//#endif - // Оставлю себе напоминалку как все это работает https://community.alexgyver.ru/threads/wifi-lampa-budilnik-proshivka-firelamp_jeeui-gpl.2739/post-85649 - //bool ready = false; tickCounter++; -#ifdef MIC_EFFECTS + if(isMicOn()){ // вот этот блок медленный, особенно нагружающим будет вызов заполенния массива //EVERY_N_MILLIS(100){ // обсчет тяжелый, так что желательно не дергать его чаще 10 раз в секунду, лучеш реже if (!(tickCounter%3)) { @@ -7700,9 +7577,7 @@ bool EffectVU::run() { } } if (!(tickCounter%3)) return false; // не будем заставлять бедный контроллер еще и выводить инфу в том же цикле, что и рассчеты. Это режет ФПС. Но без новых рассчетов - ФПС просто спам. - } else - #endif - { + } else { //EVERY_N_MILLIS(random(50,300)) { if (!(tickCounter%random(2,11))) { last_max_peak=random(0,fb->h()); @@ -7715,15 +7590,7 @@ bool EffectVU::run() { } float _scale = (maxVal==0? 0 : last_max_peak/maxVal) * amplitude; -/* -#ifdef LAMP_DEBUG - EVERY_N_SECONDS(1){ - for(uint16_t i=0; i<(sizeof(bandValues)/sizeof(float));i++) - LOG(printf_P,PSTR("%7.2f"),bandValues[i]*_scale); - LOG(printf_P,PSTR(" F: %8.2f SC: %5.2f\n"),last_freq, _scale); - } -#endif -*/ + fb->clear(); // Process the FFT data into bar heights @@ -7918,7 +7785,8 @@ void EffectVU::waterfall(uint8_t band, uint8_t barHeight) { } } } -#endif + + void EffectFlags::germany(uint8_t i){ for (uint8_t j = 0; j < fb->h(); j++){ fb->at(i, j) += diff --git a/src/effects.h b/src/effects.h index d66cd7e7..fb40dfaf 100644 --- a/src/effects.h +++ b/src/effects.h @@ -979,7 +979,6 @@ class EffectPacific : public EffectCalc { bool run() override; }; -#ifdef MIC_EFFECTS //----- Эффект "Осциллограф" // (c) kostyamat class EffectOsc : public EffectCalc { @@ -1000,7 +999,6 @@ class EffectOsc : public EffectCalc { EffectOsc(LedFB *framebuffer) : EffectCalc(framebuffer), oscHV(fb->w()), oscilLimit(fb->h()) {} bool run() override; }; -#endif // ------ Эффект "Вышиванка" // (с) проект Aurora "Munch" @@ -1878,7 +1876,7 @@ class EffectStarShips: public EffectCalc { bool run() override; void load() override; }; -#ifdef MIC_EFFECTS + /* -------------- эффект "VU-meter" (c) G6EJD, https://www.youtube.com/watch?v=OStljy_sUVg&t=0s reworked by s-marley https://github.com/s-marley/ESP32_FFT_VU @@ -1932,7 +1930,6 @@ class EffectVU: public EffectCalc { bool run() override; void load() override; }; -#endif // ----------- Эффект "Огненная лампа" // https://editor.soulmatelights.com/gallery/546-fire diff --git a/src/effects_types.h b/src/effects_types.h index 85ebb211..2014781b 100644 --- a/src/effects_types.h +++ b/src/effects_types.h @@ -168,11 +168,9 @@ EFF_RACER, // Космо-Гонщик EFF_SMOKER, // Дым EFF_FIRE2021, // Огонь от Степко EFF_MIRAGE, // Мираж -EFF_TIME = (250U) // Часы (служебный, смещаем в конец) -#ifdef MIC_EFFECTS -,EFF_VU = (254U), // Частотный анализатор (служебный, смещаем в конец) +EFF_TIME = (250U), // Часы (служебный, смещаем в конец) +EFF_VU = (254U), // Частотный анализатор (служебный, смещаем в конец) EFF_OSC = (255U) // Осциллограф -#endif } EFF_ENUM; /** набор указателей на строки с именами эффектов diff --git a/src/effectworker.cpp b/src/effectworker.cpp index 296a89ff..39bcd1c0 100644 --- a/src/effectworker.cpp +++ b/src/effectworker.cpp @@ -487,7 +487,6 @@ void EffectWorker::workerset(uint16_t effect){ case EFF_ENUM::EFF_FLOWER : worker = std::unique_ptr(new EffectFlower(canvas)); break; -#ifdef MIC_EFFECTS case EFF_ENUM::EFF_VU : worker = std::unique_ptr(new EffectVU(canvas)); break; @@ -495,8 +494,6 @@ void EffectWorker::workerset(uint16_t effect){ worker = std::unique_ptr(new EffectOsc(canvas)); break; -#endif - default: worker = std::unique_ptr(new EffectNone(canvas)); // std::unique_ptr(new EffectCalc()); } @@ -574,11 +571,9 @@ void EffectWorker::effectsReSort(SORT_TYPE _effSort) case SORT_TYPE::ST_AB : effects.sort([](EffectListElem &a, EffectListElem &b){ return std::string_view(T_EFFNAMEID[(uint8_t)a.eff_nb]).compare(T_EFFNAMEID[(uint8_t)b.eff_nb]); }); break; -#ifdef MIC_EFFECTS case SORT_TYPE::ST_MIC : effects.sort([](EffectListElem &a, EffectListElem &b){ return ((int)(pgm_read_byte(T_EFFVER + (a.eff_nb&0xFF))&0x01) - (int)(pgm_read_byte(T_EFFVER + (b.eff_nb&0xFF))&0x01)); }); break; -#endif default: break; } @@ -967,10 +962,6 @@ void EffectWorker::_load_default_fweff_list(){ if (!strlen(T_EFFNAMEID[i]) && i) // пропускаем индексы-"пустышки" без названия, кроме 0 "EFF_NONE" continue; -#ifndef MIC_EFFECTS -// if(i>EFF_ENUM::EFF_TIME) continue; // пропускаем эффекты для микрофона, если отключен микрофон -#endif - EffectListElem el(i, SET_ALL_EFFFLAGS); effects.add(el); } @@ -1233,10 +1224,10 @@ String EffectCalc::setDynCtrl(UIControl*_val){ if(_val->getId()==7 && _val->getName().startsWith(TINTF_020)==1){ // Начинается с микрофон и имеет 7 id isMicActive = (ret_val.toInt() && isMicOnState()) ? true : false; -#ifdef MIC_EFFECTS + if(_lampstate) _lampstate->setMicAnalyseDivider(isMicActive); -#endif + } else { if(isRandDemo()){ // для режима рандомного ДЕМО, если это не микрофон - то вернуть рандомное значение в пределах диапазона значений ret_val = String(random(_val->getMin().toInt(), _val->getMax().toInt()+1)); diff --git a/src/effectworker.h b/src/effectworker.h index 4f90cedc..237a6afb 100644 --- a/src/effectworker.h +++ b/src/effectworker.h @@ -44,22 +44,13 @@ JeeUI2 lib used under MIT License Copyright (c) 2019 Marsel Akhkamov #include "effects_types.h" #include "ledfb.hpp" #include "luma_curves.hpp" - -#ifdef MIC_EFFECTS #include "micFFT.h" -#endif - #include "ts.h" // Вывод значка микрофона в списке эффектов -#ifdef MIC_EFFECTS - #define MIC_SYMBOL(N) (pgm_read_byte(T_EFFVER + (uint8_t)N) % 2 ? "" : " \U0001F399") +#define MIC_SYMBOL(N) (pgm_read_byte(T_EFFVER + (uint8_t)N) % 2 ? "" : " \U0001F399") //#define MIC_SYMBOL (micSymb ? (pgm_read_byte(T_EFFVER + (uint8_t)eff->eff_nb) % 2 == 0 ? " \U0001F399" : "") : "") //#define MIC_SYMB bool micSymb = myLamp.getLampSettings().effHasMic -#else - #define MIC_SYMBOL(N) "" - //#define MIC_SYMB -#endif // Вывод номеров эффектов в списке, в WebUI #define EFF_NUMBER(N) N <= 255 ? (String(N) + ". ") : (String((byte)(N & 0xFF)) + "." + String((byte)(N >> 8) - 1U) + " ") @@ -89,7 +80,7 @@ typedef struct { float speedfactor; //uint8_t brightness; -#ifdef MIC_EFFECTS + // Mike related float mic_noise = 0.0; // уровень шума в ед. float mic_scale = 1.0; // коэф. смещения float last_freq = 0.0; // последняя измеренная часота @@ -115,7 +106,6 @@ typedef struct { float scale = 255.0 / (log((float)HIGH_MAP_FREQ) - minFreq); return (uint8_t)(isMicOn?(log(last_freq)-minFreq)*scale:0); } -#endif uint32_t freeHeap; uint8_t HeapFragmentation; @@ -335,7 +325,6 @@ class EffectCalc { float getSpeedFactor() {return _lampstate ? _lampstate->speedfactor : 1.0;} //float getBrightness() {return _lampstate ? _lampstate->brightness : 127;} -#ifdef MIC_EFFECTS void setMicAnalyseDivider(uint8_t val) {if(_lampstate) _lampstate->micAnalyseDivider = val&3;} uint8_t getMicMapMaxPeak() {return _lampstate ? _lampstate->getMicMapMaxPeak() : 0;} uint8_t getMicMapFreq() {return _lampstate ? _lampstate->getMicMapFreq() : 0;} @@ -347,7 +336,6 @@ class EffectCalc { float getMicNoise() {return _lampstate ? _lampstate->getMicNoise() : 0;} mic_noise_reduce_level_t getMicNoiseRdcLevel() {return _lampstate ? _lampstate->getMicNoiseRdcLevel() : mic_noise_reduce_level_t::NR_NONE;} -#endif bool isActive() {return active;} void setActive(bool flag) {active=flag;} uint32_t lastrun=0; /**< счетчик времени для эффектов с "задержкой" */ diff --git a/src/enc.cpp b/src/enc.cpp index 807f7347..4ec7eb0e 100644 --- a/src/enc.cpp +++ b/src/enc.cpp @@ -290,11 +290,9 @@ void isClick() { // Функция проверяет может ли контрол быть использоваан (проверка на скрытость, на скрытость по микрофону и т.п.) bool validControl(const CONTROL_TYPE ctrlCaseType) { bool isOk = false; -#ifdef MIC_EFFECTS bool isMicOn = myLamp.isMicOnOff(); if (myLamp.getEffControls()[myLamp.getEffControls().size()-1]->getName().startsWith(TINTF_020)) isMicOn = isMicOn && myLamp.getEffControls()[myLamp.getEffControls().size()-1]->getVal().toInt(); -#endif switch (ctrlCaseType & 0x0F) { case CONTROL_TYPE::RANGE: // мы меняем только ползунки или чекбоксы @@ -311,14 +309,11 @@ bool validControl(const CONTROL_TYPE ctrlCaseType) { case CONTROL_CASE::HIDE: // Если спрятанный контрол, возвращаем ложь. return false; break; -#ifdef MIC_EFFECTS case CONTROL_CASE::ISMICON: // проверка "спрятан по микрофону" if (!isMicOn && (!myLamp.isMicOnOff() || !(myLamp.getEffControls()[currDynCtrl]->getId() == 7 && myLamp.getEffControls()[currDynCtrl]->getName().startsWith(TINTF_020) == 1))) isOk = false; break; -#endif - default: - break; + default:; } return isOk; @@ -396,18 +391,9 @@ void myClicks() { toggleGBright(); break; #endif -#if defined(MIC_EFFECTS) && defined(ENC_MIC_CLICK) case ENC_MIC_CLICK: toggleMic(); break; -#endif -/* -#ifdef ENC_IP_CLICK - case ENC_IP_CLICK: - sendIP(); - break; -#endif -*/ #ifdef ENC_TIME_CLICK case ENC_TIME_CLICK: sendTime(); @@ -586,17 +572,9 @@ void toggleDemo() { else run_action(ra::demo, true); } -/* -void toggleGBright() { - run_action(ra::brt_global, myLamp.IsGlobalBrightness()); - encSendString(String(TINTF_00C) + myLamp.IsGlobalBrightness() ? ": ON" : ": OFF", txtColor, true, txtDelay); -} -*/ + void toggleMic() { -#ifdef MIC_EFFECTS run_action(ra::miconoff, myLamp.isMicOnOff()); - //encSendString(String(TINTF_021) + String(myLamp.isMicOnOff() ? ": ON" : ": OFF"), txtColor, true, txtDelay); -#endif } void toggleAUX() { diff --git a/src/interface.cpp b/src/interface.cpp index b53adc45..0492fcd7 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -173,11 +173,9 @@ void ui_page_selector(Interface *interf, const JsonObject *data, const char* act case page::eff_config : // страница "Управление списком эффектов" show_effects_config(interf, nullptr, NULL); return; - #ifdef MIC_EFFECTS case page::mike : // страница настроек микрофона show_settings_mic(interf, nullptr, NULL); return; - #endif #ifdef MP3PLAYER case page::setup_dfplayer : // страница настроек dfplayer show_settings_mp3(interf, nullptr, NULL); @@ -252,14 +250,8 @@ void ui_section_effects_list_configuration(Interface *interf, const JsonObject * interf->option(SORT_TYPE::ST_IDX, TINTF_043); interf->option(SORT_TYPE::ST_AB, TINTF_085); interf->option(SORT_TYPE::ST_AB2, TINTF_08A); -#ifdef MIC_EFFECTS interf->option(SORT_TYPE::ST_MIC, TINTF_08D); // эффекты с микрофоном -#endif interf->json_section_end(); - //interf->checkbox(TCONST_numInList, myLamp.getLampFlagsStuct().numInList , TINTF_090, false); // нумерация в списке эффектов -#ifdef MIC_EFFECTS - //interf->checkbox(TCONST_effHasMic, myLamp.getLampFlagsStuct().effHasMic , TINTF_091, false); // значек микрофона в списке эффектов -#endif interf->button(button_t::submit, TCONST_set_effect, TINTF_Save, P_GRAY); // Save btn interf->button_value(button_t::submit, TCONST_set_effect, TCONST_copy, TINTF_005); // Copy button @@ -345,17 +337,14 @@ void set_effects_config_param(Interface *interf, const JsonObject *data, const c EffectListElem *effect = confEff; //bool isNumInList = (*data)[TCONST_numInList] == "1"; -#ifdef MIC_EFFECTS + bool isEffHasMic = (*data)[TCONST_effHasMic]; myLamp.setEffHasMic(isEffHasMic); -#endif + SORT_TYPE st = (*data)[V_effSort].as(); if(myLamp.getLampState().isInitCompleted){ bool isRecreate = false; -#ifdef MIC_EFFECTS - //isRecreate = (myLamp.getLampFlagsStuct().effHasMic!=isEffHasMic) || isRecreate; -#endif isRecreate = (myLamp.effwrkr.getEffSortType()!=st) || isRecreate; if(isRecreate){ @@ -521,13 +510,12 @@ void block_effect_controls(Interface *interf, const JsonObject *data, const char JsonArrayConst sect = interf->json_section_begin(A_effect_ctrls); LList> &controls = myLamp.effwrkr.getControls(); uint8_t ctrlCaseType; // тип контрола, старшие 4 бита соответствуют CONTROL_CASE, младшие 4 - CONTROL_TYPE -#ifdef MIC_EFFECTS + bool isMicOn = myLamp.isMicOnOff(); LOG(printf_P,PSTR("Make UI for %d controls\n"), controls.size()); for(unsigned i=0; igetId()==7 && controls[i]->getName().startsWith(TINTF_020)) isMicOn = isMicOn && controls[i]->getVal().toInt(); -#endif LOG(printf_P, PSTR("block_effect_controls() got %u ctrls\n"), controls.size()); for (const auto &ctrl : controls){ @@ -539,20 +527,10 @@ void block_effect_controls(Interface *interf, const JsonObject *data, const char continue; break; case CONTROL_CASE::ISMICON : -#ifdef MIC_EFFECTS - //if(!myLamp.isMicOnOff()) continue; if(!isMicOn && (!myLamp.isMicOnOff() || !(ctrl->getId()==7 && ctrl->getName().startsWith(TINTF_020)==1) )) continue; -#else - continue; -#endif break; case CONTROL_CASE::ISMICOFF : -#ifdef MIC_EFFECTS - //if(myLamp.isMicOnOff()) continue; if(isMicOn && (myLamp.isMicOnOff() || !(ctrl->getId()==7 && ctrl->getName().startsWith(TINTF_020)==1) )) continue; -#else - continue; -#endif break; default: break; } @@ -669,10 +647,7 @@ void ui_block_mainpage_switches(Interface *interf, const JsonObject *data, const interf->checkbox(K_demo, myLamp.getMode() == LAMPMODE::MODE_DEMO, TINTF_00F, true); interf->checkbox(TCONST_Events, myLamp.IsEventsHandled(), TINTF_011, true); interf->checkbox(TCONST_drawbuff, myLamp.isDrawOn(), TINTF_0CE, true); - -#ifdef MIC_EFFECTS interf->checkbox(TCONST_Mic, myLamp.isMicOnOff(), TINTF_012, true); -#endif interf->checkbox(TCONST_AUX, embui.paramVariant(TCONST_AUX), TCONST_AUX, true); #ifdef ESP_USE_BUTTON interf->checkbox(TCONST_Btn, myButtons->isButtonOn(), TINTF_013, true); @@ -824,39 +799,23 @@ void set_clear(Interface *interf, const JsonObject *data, const char* action){ myLamp.fillDrawBuf(color); } - -#ifdef MIC_EFFECTS -void block_settings_mic(Interface *interf, const JsonObject *data, const char* action){ +void show_settings_mic(Interface *interf, const JsonObject *data, const char* action){ if (!interf) return; + interf->json_frame_interface(); interf->json_section_main(TCONST_settings_mic, TINTF_020); interf->checkbox(TCONST_Mic, myLamp.isMicOnOff(), TINTF_012, true); interf->json_section_begin(TCONST_set_mic); - if (!myLamp.isMicCalibration()) { interf->number_constrained(V_micScale, round(myLamp.getLampState().getMicScale() * 10) / 10, TINTF_022, 0.1f, 0.1f, 4.0f); interf->number_constrained(V_micNoise, round(myLamp.getLampState().getMicNoise() * 10) / 10, TINTF_023, 0.1f, 0.0f, 32.0f); interf->range (V_micRdcLvl, (int)myLamp.getLampState().getMicNoiseRdcLevel(), 0, 4, 1, TINTF_024, false); - interf->button(button_t::submit, TCONST_set_mic, TINTF_Save, P_GRAY); - interf->json_section_end(); - - //interf->spacer(); - //interf->button(button_t::generic, TCONST_mic_cal, TINTF_025, P_RED); // включение калибровки микрофона - } else { - interf->button(button_t::generic, TCONST_mic_cal, TINTF_027, P_RED ); - } + interf->json_section_end(); interf->spacer(); interf->button(button_t::generic, A_ui_page_settings, TINTF_exit); - interf->json_section_end(); -} - -void show_settings_mic(Interface *interf, const JsonObject *data, const char* action){ - if (!interf) return; - interf->json_frame_interface(); - block_settings_mic(interf, data, NULL); interf->json_frame_flush(); } @@ -885,21 +844,6 @@ void set_micflag(Interface *interf, const JsonObject *data, const char* action){ myLamp.setMicOnOff((*data)[TCONST_Mic]); } -void set_settings_mic_calib(Interface *interf, const JsonObject *data, const char* action){ - //if (!data) return; - if (!myLamp.isMicOnOff()) { - //myLamp.sendString(String(TINTF_026).c_str(), CRGB::Red); - } else if(!myLamp.isMicCalibration()) { - //myLamp.sendString(String(TINTF_025).c_str(), CRGB::Red); - myLamp.setMicCalibration(); - } else { - //myLamp.sendString(String(TINTF_027).c_str(), CRGB::Red); - } - - show_settings_mic(interf, data, NULL); -} -#endif - /** * @brief WebUI страница "Настройки" - "другие" * @@ -1322,9 +1266,7 @@ void set_streaming_universe(Interface *interf, const JsonObject *data, const cha void user_settings_frame(Interface *interf, const JsonObject *data, const char* action){ // other interf->button_value(button_t::generic, A_ui_page, e2int(page::setup_devices), "Внешние устройства"); -#ifdef MIC_EFFECTS interf->button_value(button_t::generic, A_ui_page, e2int(page::mike), TINTF_020); -#endif #ifdef ESP_USE_BUTTON interf->button_value(button_t::generic, A_ui_page, e2int(page::setup_bttn), TINTF_013); #endif @@ -1642,11 +1584,9 @@ void rebuild_effect_list_files(lstfile_t lst){ void embui_actions_register(){ // создаем конфигурационные параметры и регистрируем обработчики активностей -#ifdef MIC_EFFECTS embui.var_create(V_micScale, 1.28); // embui.var_create(V_micNoise, 0.0); // embui.var_create(V_micRdcLvl, 0); -#endif embui.var_create(TCONST_DTimer, DEFAULT_DEMO_TIMER); // Дефолтное значение, настраивается из UI // embui.var_create(TCONST_alarmPT, 85); // 5<<4+5, старшие и младшие 4 байта содержат 5 @@ -1723,11 +1663,9 @@ void embui_actions_register(){ embui.action.add(TCONST_set_gpio, set_gpios); // Set gpios embui.action.add(T_display_type, page_display_setup); // load display setup page depending on selected disp type (action for drop down list) -#ifdef MIC_EFFECTS embui.action.add(TCONST_set_mic, set_settings_mic); embui.action.add(TCONST_Mic, set_micflag); - embui.action.add(TCONST_mic_cal, set_settings_mic_calib); -#endif + //embui.action.add(TCONST_mic_cal, set_settings_mic_calib); #ifdef ESP_USE_BUTTON // embui.action.add(TCONST_butt_conf, show_butt_conf); diff --git a/src/interface.h b/src/interface.h index 362d035f..c6d76007 100644 --- a/src/interface.h +++ b/src/interface.h @@ -137,9 +137,7 @@ void show_effects_config_param(Interface *interf, const JsonObject *data, const */ void block_effects_config(Interface *interf, const JsonObject *data, const char* action); -#ifdef MIC_EFFECTS void show_settings_mic(Interface *interf, const JsonObject *data, const char* action); -#endif /** * @brief load events configuarion from file diff --git a/src/lamp.cpp b/src/lamp.cpp index 8e9e0fd5..5780bf94 100644 --- a/src/lamp.cpp +++ b/src/lamp.cpp @@ -50,10 +50,7 @@ Lamp::Lamp() : effwrkr(&lampState){ lampState.isEffectsDisabledUntilText = false; lampState.isOffAfterText = false; lampState.dawnFlag = false; // флаг устанавливается будильником "рассвет" -//#ifdef MIC_EFFECTS - lampState.isCalibrationRequest = false; // находимся ли в режиме калибровки микрофона lampState.micAnalyseDivider = 1; // анализ каждый раз -//#endif lampState.flags = 0; // сборосить все флаги состояния lampState.speedfactor = 1.0; // дефолтное значение } @@ -113,17 +110,15 @@ void Lamp::lamp_init() } void Lamp::handle(){ -#ifdef MIC_EFFECTS static unsigned long mic_check = 0; // = 40000; // пропускаю первые 40 секунд - if(effwrkr.status() && flags.isMicOn && (flags.ONflag || isMicCalibration()) && !isAlarm() && mic_check + MIC_POLLRATE < millis()){ - if(effwrkr.isMicOn() || isMicCalibration()) + if(effwrkr.status() && flags.isMicOn && (flags.ONflag) && !isAlarm() && mic_check + MIC_POLLRATE < millis()){ + if(effwrkr.isMicOn()) micHandler(); mic_check = millis(); } else { // если микрофон не нужен, удаляем объект if (mw){ delete mw; mw = nullptr; } } -#endif // все что ниже, будет выполняться раз в 0.999 секундy static unsigned long wait_handlers; @@ -281,7 +276,6 @@ void Lamp::startNormalMode(bool forceOff) typedef enum {FIRSTSYMB=1,LASTSYMB=2} SYMBPOS; -#ifdef MIC_EFFECTS void Lamp::micHandler() { static uint8_t counter=0; @@ -369,7 +363,6 @@ void Lamp::setMicOnOff(bool val) { } save_flags(); } -#endif // MIC_EFFECTS void Lamp::setBrightness(uint8_t tgtbrt, fade_t fade, bool bypass){ LOG(printf, "Lamp::setBrightness(%u,%u,%u)\n", tgtbrt, static_cast(fade), bypass); @@ -430,12 +423,10 @@ void Lamp::switcheffect(effswitch_t action, uint16_t effnb){ * @param fade - переключаться через фейдер или сразу */ void Lamp::_switcheffect(effswitch_t action, bool fade, uint16_t effnb, bool skip) { -#ifdef MIC_EFFECTS - lampState.setMicAnalyseDivider(1); // восстановить делитель, при любой активности (поскольку эффекты могут его перенастраивать под себя) -#endif + lampState.setMicAnalyseDivider(1); // восстановить делитель, при любой активности (поскольку эффекты могут его перенастраивать под себя) #ifdef ENCODER - exitSettings(); + exitSettings(); #endif if (!skip) { diff --git a/src/lamp.h b/src/lamp.h index 63a34dc3..adbf5866 100644 --- a/src/lamp.h +++ b/src/lamp.h @@ -44,10 +44,7 @@ JeeUI2 lib used under MIT License Copyright (c) 2019 Marsel Akhkamov #include "char_const.h" #include "mp3player.h" #include "luma_curves.hpp" - -#ifdef MIC_EFFECTS #include "micFFT.h" -#endif #ifndef DEFAULT_MQTTPUB_INTERVAL #define DEFAULT_MQTTPUB_INTERVAL 30 @@ -179,10 +176,9 @@ class Lamp { uint16_t storedEffect = (uint16_t)EFF_ENUM::EFF_NONE; CRGB rgbColor = CRGB::White; // дефолтный цвет для RGB-режима -#ifdef MIC_EFFECTS + // Microphone MicWorker *mw = nullptr; void micHandler(); -#endif Task *demoTask = nullptr; // динамический планировщик Смены эффектов в ДЕМО @@ -235,14 +231,10 @@ class Lamp { LAMPSTATE &getLampState() {return lampState;} LList>&getEffControls() { return effwrkr.getControls(); } -#ifdef MIC_EFFECTS - void setMicCalibration() {lampState.isCalibrationRequest = true;} - bool isMicCalibration() const {return lampState.isCalibrationRequest;} - + //void setMicCalibration() {lampState.isCalibrationRequest = true;} + //bool isMicCalibration() const {return lampState.isCalibrationRequest;} void setMicOnOff(bool val); - bool isMicOnOff() const {return flags.isMicOn;} -#endif void setSpeedFactor(float val) { lampState.speedfactor = val; From 805934c13a98ff9614344fb55953ca0a2c38b408 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Sat, 6 Jan 2024 18:23:38 +0900 Subject: [PATCH 3/3] removed obsolete MIC toggle from encoder --- src/enc.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/enc.cpp b/src/enc.cpp index 4ec7eb0e..34e689c4 100644 --- a/src/enc.cpp +++ b/src/enc.cpp @@ -386,14 +386,6 @@ void myClicks() { toggleDemo(); break; #endif -#ifdef ENC_GBRI_CLICK - case ENC_GBRI_CLICK: - toggleGBright(); - break; -#endif - case ENC_MIC_CLICK: - toggleMic(); - break; #ifdef ENC_TIME_CLICK case ENC_TIME_CLICK: sendTime();