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.11b
Добавлен редактор палитр
Исправлены мелкие баги в эффектах
@@ -15,13 +18,12 @@
Добавлен рассвет
TODO:
плавная смена режимов
Аккуратнее со светомузыкой!
4 клика вкл выкл смену?
плавная смена режимов
4 клика вкл выкл смену?
Mqtt?
Базовый пак
Базовый пак
Предложения Серёги крутского
Убрать аплод?
Убрать аплод?
Огонь 2018/2020?
Взять огонь отсюда 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";
// ------------ Прочее -------------
#define GL_VERSION 012 // код версии прошивки
#define GL_VERSION 013 // код версии прошивки
#define EE_TOUT 30000 // таймаут сохранения епром после изменения, мс
//#define DEBUG_SERIAL // закомментируй чтобы выключить отладку (скорость 115200)
#define EE_KEY 51 // ключ сброса WiFi (измени для сброса всех настроек)
@@ -97,6 +99,7 @@ const char WiFiPassword[] = "12345678";
#include "timerMillis.h" // таймер миллис
#include "VolAnalyzer.h" // анализатор громкости
#include "FFT_C.h" // фурье
#define FASTLED_ALLOW_INTERRUPTS 0
#include <FastLED.h> // лента
#include <ESP8266WiFi.h> // базовая либа есп
#include <WiFiUdp.h> // общение по UDP

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
void effectsRoutine() {
static timerMillis effTmr(30, true);
static byte prevEff = 255;
if (dawnTmr.running()) {
if (effTmr.isReady()) {
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();
return;
}
}
if (cfg.state && effTmr.isReady()) {
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() {
int maxBr = cfg.bright;
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 (cfg.adcMode == GL_ADC_BRI || cfg.adcMode == GL_ADC_BOTH) { // ----> датчик света или оба
maxBr = constrain(phot.getFil(), cfg.minLight, cfg.maxLight);
maxBr = map(maxBr, cfg.minLight, cfg.maxLight, cfg.minBright, cfg.maxBright);
} else if (cfg.adcMode > 2 && // ----> ацп мик
CUR_PRES.soundMode > 1 && // светомузыка вкл
CUR_PRES.soundReact == GL_REACT_BRI) { // режим яркости
fadeBr = mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max);
if (cfg.minLight != cfg.maxLight)
maxBr = map(maxBr, cfg.minLight, cfg.maxLight, cfg.minBright, cfg.maxBright);
}
if (musicMode() && // светомузыка вкл
CUR_PRES.soundReact == GL_REACT_BRI) { // режим яркости
fadeBr = mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max); // громкость в 0-255
}
return scaleFF(maxBr, fadeBr);
}
int getLength() {
if (cfg.adcMode > 2 // ацп мик
&& CUR_PRES.soundMode > 1 // светомузыка вкл
&& CUR_PRES.soundReact == GL_REACT_LEN // режим длины
if (musicMode() // светомузыка вкл
&& CUR_PRES.soundReact == GL_REACT_LEN // режим длины
) return mapFF(getSoundVol(), 0, cfg.length);
else return cfg.length;
}
byte getScale() {
if (cfg.adcMode > 2 // ацп мик
&& CUR_PRES.soundMode > 1 // светомузыка вкл
&& CUR_PRES.soundReact == GL_REACT_SCL // режим масштаба
if (musicMode() // светомузыка вкл
&& CUR_PRES.soundReact == GL_REACT_SCL // режим масштаба
) return mapFF(getSoundVol(), CUR_PRES.min, CUR_PRES.max);
else return CUR_PRES.scale;
}