ESP, IoT Анализатор аудиоспектра на ESP32

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric, у меня на скрине скеч ток скаченый по умолчанию все стоит так что меняй версию ядра
 

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
Вот как бывает Более свежая версия строит козни а старая все ставит на свои места век живи век учись.
 

Вложения

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
Отключил WEB строка 55 поставил вместо 1 ноль и выдал просто зачитаешься.
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino: In function 'void spectrus_Mode()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:726:26: error: 'posOffset' was not declared in this scope
posLevel = vReal[posOffset[pos]];
^~~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino: In function 'void lamp_Mode()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:1161:55: error: 'months' was not declared in this scope
RuningString((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]);
^~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:1161:55: note: suggested alternative: 'smooth'
RuningString((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]);
^~~~~~
smooth
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\Spectrus_esp32.ino:1161:87: error: 'weekDays' was not declared in this scope
RuningString((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]);
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino: In function 'void buttonTick()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:80:13: error: 'local_IP' was not declared in this scope
if (local_IP != "") {
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:80:13: note: suggested alternative: 'locale_t'
if (local_IP != "") {
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino: In function 'void buttonTick1()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:144:13: error: 'local_IP' was not declared in this scope
if (local_IP != "") {
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\button_control.ino:144:13: note: suggested alternative: 'locale_t'
if (local_IP != "") {
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino: In function 'void ir_tick_spectrus()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:99:26: error: 'local_IP' was not declared in this scope
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:99:26: note: suggested alternative: 'locale_t'
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:161:55: error: 'months' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:161:55: note: suggested alternative: 'smooth'
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
smooth
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:161:87: error: 'weekDays' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino: In function 'void ir_tick_lamp()':
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:230:26: error: 'local_IP' was not declared in this scope
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:230:26: note: suggested alternative: 'locale_t'
tLen = mb_strlen(local_IP) * 6 + WIDTH;
^~~~~~~~
locale_t
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:276:55: error: 'months' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:276:55: note: suggested alternative: 'smooth'
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~
smooth
C:\Users\user\Desktop\spektrum_new_pov\Spectrus_esp32_1.8a\Spectrus_esp32\ir_control.ino:276:87: error: 'weekDays' was not declared in this scope
tLen = mb_strlen((String)rtc.getDay() + " " + months[rtc.getMonth()] + ", " + weekDays[rtc.getDayofWeek()]) * 6 + WIDTH;
^~~~~~~~
exit status 1

Compilation error: 'posOffset' was not declared in this scope

Снимок экрана (6).png

Тишина образовалась не на шутку, Так кто ни будь попробовал внести изменения в строке 55 единицу поменять на ноль и запустить компиляцию.

В строке 60 цифра должна быть 24 а не 18 и не 16 (как кто то писал) если ширина матрице 48 это количество диодов в строке 58.
 

bort707

★★★★★★✩
21 Сен 2020
3,302
959
Тишина потому что вряд ли кто помнит код наизусть, чтобы по номеру строки сразу понять, о чем вы.
Если вы хотите осмысленного разговора - пишете подробно и со ссылками на части текста.
По мне так фраза
если ширина матрице 48 это количество диодов в строке 58.
звучит бредово. Обоснуйте
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric,
C++:
//===== Параметры LED-ленты (матрицы) =======================================================
58 #define WIDTH 48                         // Ширина матрицы
59 #define HEIGHT 16                        // Высота матрицы
60 #define NUM_BANDS 48                     // Количество столбиков. Каждый столбик отвечат за визуализацию определённой частоты (максимум - 24 столбика)
61 #define VOLUME_SCALE max(WIDTH, HEIGHT)  // длина шкалы громкости
по русски же написана ширина это и есть количество столбиков в матрице тобишь в 58 и 60 строке их должно быть одинаково
 

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
57 //===== Параметры LED-ленты (матрицы) =======================================================
58 #define WIDTH 32 // Ширина матрицы
59 #define HEIGHT 16 // Высота матрицы
60 #define NUM_BANDS 16 // Количество столбиков. Каждый столбик отвечат за визуализацию определённой частоты (максимум - 24 столбика)

Я имел в виду вот это #define NUM_BANDS
Матрица 16Х16 #define NUM_BANDS 8
Матрица 32Х16 #define NUM_BANDS 16
Матрица 48Х16 #define NUM_BANDS 24
и в комментарии написано максимум 24 столбика
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric,
все понимаю но кусок кода в студию пожплуста ( через параметр вставить код пожалуста )
просмотрел код не нашол такова
 

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
Посмотрите видео по ссылке с 6.08 по 6.55 минуты для чего это делается и вы поймете
а ставить неопределенное число это фантазии самого пользователя.

Вот скриншот
 

Вложения

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Seric, ну незнаю может автор что ошибся
C++:
//===== Параметры LED-ленты (матрицы) =======================================================
#define WIDTH 32                         // Ширина матрицы
#define HEIGHT 16                        // Высота матрицы
#define NUM_BANDS 32                     // Количество столбиков. Каждый столбик отвечат за визуализацию определённой частоты (максимум - 24 столбика)
нашол как сам шил 2 матрицы 16х16 тобыш получилось ширина 32 высота 16 у меня работала . шас в другом месте не под рукой

да заметил как автор и писал что просаживается фпс на больших матрицах

@Seric, у тебя какая ширина ? и высота ?
 
Изменено:

Seric

✩✩✩✩✩✩✩
7 Авг 2025
11
0
@wulf,
Нет автор не ошибся а улучшил визуализацию

32Х16 значит будет #define NUM_BANDS 16 два плавных подъёма столбов сначала один затем второй первый затухает второй отстает.

И самое важное не забываем автор сделал все правильно в первом проекте но потом второй автор переписал код и если что то не так я здесь не причем сам пытаюсь разобраться что тут не так как нужно не зря я затронул тему нарвавшись на ошибки.
 

Олег Поляков

★★★★✩✩✩
18 Янв 2022
336
240
www.1812.ru
О, как много всего написано в один день!
WIDTH и HEIGHT - это физические значения ширины и высоты светодиодной матрицы.
NUM_BANDS - это количество столбиков.
Например, мы имеем матрицу шириной в 32 светодиода. Если хотим, чтобы каждый столбик был шириной в 2 светодиода, то выставляем NUM_BANDS в 16.

На матрице 48x16 при ширине столбика в 1 светодиод скорость отрисовки экрана у меня получалась 20-21 кадр в секунду.
На матрице 64x16 - 16-18 кадров, что уже визуально смотрелось плохо. Появлялся эффект запаздывания от звука.
 
Изменено:

weacomeout

✩✩✩✩✩✩✩
22 Фев 2025
7
2
@Олег Поляков
Олег, выручай, сильно прошу. Как в твоей прошивке сказать плате стартовать не с левого нижнего края, а с правого нижнего? Пихал диоды в корпус, пока он лежал лицом вниз. Теперь вся картинка отзеркалена ((

@wulf, извини, тебя тоже пингану, кажется, ты тоже довольно неплохо разбираешься в этом. Помоги, пожалуйста, если не затруднит.
 

Олег Поляков

★★★★✩✩✩
18 Янв 2022
336
240
www.1812.ru
@weacomeout, если и можно исправить, то только тут:
C++:
// FastLED_NeoMaxtrix - see https://github.com/marcmerlin/FastLED_NeoMatrix for Tiled Matrixes, Zig-Zag and so forth
FastLED_NeoMatrix *matrix = new FastLED_NeoMatrix(leds, kMatrixWidth, kMatrixHeight,
                                                  NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +  // Замечено, что LED-лента, спаянная по схеме "змейка" и готовая матрица 16x16 по разному реагируют на эту настройку (зеркалят по вертикали). Поэтому: RIGHT - для матрицы; LEFT - для ленты
                                                  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG + NEO_TILE_BOTTOM + NEO_TILE_LEFT + NEO_TILE_ROWS);