This commit is contained in:
Alex
2021-02-23 02:08:59 +03:00
parent 6d26f40a56
commit aa6c2618fa
4 changed files with 55 additions and 47 deletions

View File

@@ -1,7 +1,10 @@
/* /*
Версия 0.13b
Улучшена стабильность
Версия 0.12b Версия 0.12b
Мелкие исправления Мелкие исправления
Версия 0.11b Версия 0.11b
Добавлен редактор палитр Добавлен редактор палитр
Исправлены мелкие баги в эффектах Исправлены мелкие баги в эффектах
@@ -15,13 +18,12 @@
Добавлен рассвет Добавлен рассвет
TODO: TODO:
плавная смена режимов плавная смена режимов
Аккуратнее со светомузыкой! 4 клика вкл выкл смену?
4 клика вкл выкл смену?
Mqtt? Mqtt?
Базовый пак Базовый пак
Предложения Серёги крутского Предложения Серёги крутского
Убрать аплод? Убрать аплод?
Огонь 2018/2020? Огонь 2018/2020?
Взять огонь отсюда https://community.alexgyver.ru/threads/wifi-lampa-budilnik-obsuzhdenie-proshivki-ot-gunner47.2418/page-72#post-33652 Взять огонь отсюда https://community.alexgyver.ru/threads/wifi-lampa-budilnik-obsuzhdenie-proshivki-ot-gunner47.2418/page-72#post-33652
Вернуть искры Вернуть искры
@@ -68,7 +70,7 @@ const char AP_NameChar[] = "GyverLamp2";
const char WiFiPassword[] = "12345678"; const char WiFiPassword[] = "12345678";
// ------------ Прочее ------------- // ------------ Прочее -------------
#define GL_VERSION 012 // код версии прошивки #define GL_VERSION 013 // код версии прошивки
#define EE_TOUT 30000 // таймаут сохранения епром после изменения, мс #define EE_TOUT 30000 // таймаут сохранения епром после изменения, мс
//#define DEBUG_SERIAL // закомментируй чтобы выключить отладку (скорость 115200) //#define DEBUG_SERIAL // закомментируй чтобы выключить отладку (скорость 115200)
#define EE_KEY 51 // ключ сброса WiFi (измени для сброса всех настроек) #define EE_KEY 51 // ключ сброса WiFi (измени для сброса всех настроек)
@@ -97,6 +99,7 @@ const char WiFiPassword[] = "12345678";
#include "timerMillis.h" // таймер миллис #include "timerMillis.h" // таймер миллис
#include "VolAnalyzer.h" // анализатор громкости #include "VolAnalyzer.h" // анализатор громкости
#include "FFT_C.h" // фурье #include "FFT_C.h" // фурье
#define FASTLED_ALLOW_INTERRUPTS 0
#include <FastLED.h> // лента #include <FastLED.h> // лента
#include <ESP8266WiFi.h> // базовая либа есп #include <ESP8266WiFi.h> // базовая либа есп
#include <WiFiUdp.h> // общение по UDP #include <WiFiUdp.h> // общение по UDP

View File

@@ -25,6 +25,9 @@ void setupADC() {
phot.setDt(80); phot.setDt(80);
phot.setK(31); phot.setK(31);
if (cfg.adcMode == GL_ADC_BRI) switchToPhot();
else if (cfg.adcMode == GL_ADC_MIC) switchToMic();
} }
@@ -52,23 +55,21 @@ void checkAnalog() {
} }
void checkMusic() { void checkMusic() {
if (CUR_PRES.soundMode > 1) { if (CUR_PRES.advMode == GL_ADV_VOL) { // громкость
if (CUR_PRES.soundMode == GL_MUS_VOL) { // громкость vol.tick();
vol.tick(); } else if (CUR_PRES.advMode == GL_ADV_LOW || CUR_PRES.advMode == GL_ADV_HIGH) { // частоты
} else { // частоты int raw[FFT_SIZE], spectr[FFT_SIZE];
int raw[FFT_SIZE], spectr[FFT_SIZE]; for (int i = 0; i < FFT_SIZE; i++) raw[i] = analogRead(A0);
for (int i = 0; i < FFT_SIZE; i++) raw[i] = analogRead(A0); FFT(raw, spectr);
FFT(raw, spectr); int low_raw = 0;
int low_raw = 0; int high_raw = 0;
int high_raw = 0; for (int i = 0; i < FFT_SIZE / 2; i++) {
for (int i = 0; i < FFT_SIZE / 2; i++) { spectr[i] = (spectr[i] * (i + 2)) >> 1;
spectr[i] = (spectr[i] * (i + 2)) >> 1; if (i < 2) low_raw += spectr[i];
if (i < 2) low_raw += spectr[i]; else high_raw += spectr[i];
else high_raw += spectr[i];
}
low.tick(low_raw);
high.tick(high_raw);
} }
low.tick(low_raw);
high.tick(high_raw);
} }
} }
@@ -79,10 +80,10 @@ void checkPhot() {
} }
byte getSoundVol() { byte getSoundVol() {
switch (CUR_PRES.soundMode) { switch (CUR_PRES.advMode) {
case GL_MUS_VOL: return vol.getVol(); case GL_ADV_VOL: return vol.getVol();
case GL_MUS_LOW: return low.getVol(); case GL_ADV_LOW: return low.getVol();
case GL_MUS_HIGH: return high.getVol(); case GL_ADV_HIGH: return high.getVol();
} }
return 0; return 0;
} }

View File

@@ -6,10 +6,11 @@
#define GL_TYPE_STRIP 1 #define GL_TYPE_STRIP 1
#define GL_TYPE_ZIG 2 #define GL_TYPE_ZIG 2
#define GL_TYPE_PARAL 3 #define GL_TYPE_PARAL 3
#define GL_MUS_NONE 1 #define GL_ADV_NONE 1
#define GL_MUS_VOL 2 #define GL_ADV_VOL 2
#define GL_MUS_LOW 3 #define GL_ADV_LOW 3
#define GL_MUS_HIGH 4 #define GL_ADV_HIGH 4
#define GL_ADV_CLOCK 5
#define GL_REACT_BRI 1 #define GL_REACT_BRI 1
#define GL_REACT_SCL 2 #define GL_REACT_SCL 2
#define GL_REACT_LEN 3 #define GL_REACT_LEN 3
@@ -100,7 +101,7 @@ struct Preset {
byte effect = 1; // тип эффекта (1,2...) ВЫЧЕСТЬ 1 byte effect = 1; // тип эффекта (1,2...) ВЫЧЕСТЬ 1
byte fadeBright = 0; // флаг на свою яркость (0/1) byte fadeBright = 0; // флаг на свою яркость (0/1)
byte bright = 100; // своя яркость (0.. 255) byte bright = 100; // своя яркость (0.. 255)
byte soundMode = 1; // тип звука (1,2...) ВЫЧЕСТЬ 1 byte advMode = 1; // дополнительно (1,2...) ВЫЧЕСТЬ 1
byte soundReact = 1; // реакция на звук (1,2...) ВЫЧЕСТЬ 1 byte soundReact = 1; // реакция на звук (1,2...) ВЫЧЕСТЬ 1
byte min = 0; // мин сигнал светомузыки (0.. 255) byte min = 0; // мин сигнал светомузыки (0.. 255)
byte max = 0; // макс сигнал светомузыки (0.. 255) byte max = 0; // макс сигнал светомузыки (0.. 255)

View File

@@ -1,7 +1,7 @@
void effectsRoutine() { void effectsRoutine() {
static timerMillis effTmr(30, true); static timerMillis effTmr(30, true);
static byte prevEff = 255; static byte prevEff = 255;
if (dawnTmr.running()) { if (dawnTmr.running()) {
if (effTmr.isReady()) { if (effTmr.isReady()) {
fill_solid(leds, MAX_LEDS, ColorFromPalette(HeatColors_p, dawnTmr.getLength8(), scaleFF(dawnTmr.getLength8(), dawn.bright), LINEARBLEND)); fill_solid(leds, MAX_LEDS, ColorFromPalette(HeatColors_p, dawnTmr.getLength8(), scaleFF(dawnTmr.getLength8(), dawn.bright), LINEARBLEND));
@@ -9,7 +9,7 @@ void effectsRoutine() {
} }
if (dawnTmr.isReady()) dawnTmr.stop(); if (dawnTmr.isReady()) dawnTmr.stop();
return; return;
} }
if (cfg.state && effTmr.isReady()) { if (cfg.state && effTmr.isReady()) {
int thisLength = getLength(); int thisLength = getLength();
@@ -209,34 +209,37 @@ void effectsRoutine() {
} }
} }
bool musicMode() {
return ((cfg.adcMode == GL_ADC_MIC || cfg.adcMode == GL_ADC_BOTH) && (CUR_PRES.advMode > 1 && CUR_PRES.advMode <= 4));
}
byte getBright() { byte getBright() {
int maxBr = cfg.bright; int maxBr = cfg.bright; // макс яркость из конфига
byte fadeBr = 255; byte fadeBr = 255;
if (CUR_PRES.fadeBright) fadeBr = CUR_PRES.bright; // ограничен вручную if (CUR_PRES.fadeBright) fadeBr = CUR_PRES.bright; // ограничен вручную
if (cfg.adcMode == GL_ADC_BRI || cfg.adcMode == GL_ADC_BOTH) { // ----> датчик света if (cfg.adcMode == GL_ADC_BRI || cfg.adcMode == GL_ADC_BOTH) { // ----> датчик света или оба
maxBr = constrain(phot.getFil(), cfg.minLight, cfg.maxLight); maxBr = constrain(phot.getFil(), cfg.minLight, cfg.maxLight);
maxBr = map(maxBr, cfg.minLight, cfg.maxLight, cfg.minBright, cfg.maxBright); if (cfg.minLight != cfg.maxLight)
} else if (cfg.adcMode > 2 && // ----> ацп мик maxBr = map(maxBr, cfg.minLight, cfg.maxLight, cfg.minBright, cfg.maxBright);
CUR_PRES.soundMode > 1 && // светомузыка вкл }
CUR_PRES.soundReact == GL_REACT_BRI) { // режим яркости if (musicMode() && // светомузыка вкл
fadeBr = mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max); CUR_PRES.soundReact == GL_REACT_BRI) { // режим яркости
fadeBr = mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max); // громкость в 0-255
} }
return scaleFF(maxBr, fadeBr); return scaleFF(maxBr, fadeBr);
} }
int getLength() { int getLength() {
if (cfg.adcMode > 2 // ацп мик if (musicMode() // светомузыка вкл
&& CUR_PRES.soundMode > 1 // светомузыка вкл && CUR_PRES.soundReact == GL_REACT_LEN // режим длины
&& CUR_PRES.soundReact == GL_REACT_LEN // режим длины
) return mapFF(getSoundVol(), 0, cfg.length); ) return mapFF(getSoundVol(), 0, cfg.length);
else return cfg.length; else return cfg.length;
} }
byte getScale() { byte getScale() {
if (cfg.adcMode > 2 // ацп мик if (musicMode() // светомузыка вкл
&& CUR_PRES.soundMode > 1 // светомузыка вкл && CUR_PRES.soundReact == GL_REACT_SCL // режим масштаба
&& CUR_PRES.soundReact == GL_REACT_SCL // режим масштаба
) return mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max); ) return mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max);
else return CUR_PRES.scale; else return CUR_PRES.scale;
} }