Всем привет, задумал сделать простенькую цветомузыку на адресной ленте, 2 вертикальные шкалы VU метра и горизонтальная около метра просто с мигающими диодами. Про готовые варианты Алекса и чип и дип знаю, как надоест развлекаться сделаю на них. Собственно хочу чтобы на VU метре диоды подсвечивались тусклым цветом(типа задник) а при работе шкалы цвет менялся на яркую шкалу, куда шкала не дошла-там сохраняется задник. при отсутствии сигнала просто статичный задник во всю ленту. Собственно проблема следующая, не работает задник без сигнала. Если сигнал есть, даже минимальный (на потенциометре проверил) зажигается шкала, все что не занято шкалой подсвечено цветом задника. А вот статичный задник появляется при первом включении и навсегда пропадает после подачи сигнала и срабатывания шкалы, сигнал пропал - все потухло. Подскажите плиз как исправить, желательно развернуто и доходчиво, а то я не очень хорошо разбираюсь в написании кода. собственно код прилагаю.
З.Ы. в коде отмечены 3 блока, первый отвечает за рост шкалы при увеличении уровня сигнала, второй за падение шкалы и заливку свободных от нее диодов фоном, третий за статичный фон покоя. Если из кода выкинуть "второй блок" то статичный задник корректно работает, а вот шкала перестает падать, она поднимается и остается статичной пока сигнал не упадет на 0.
З.Ы. в коде отмечены 3 блока, первый отвечает за рост шкалы при увеличении уровня сигнала, второй за падение шкалы и заливку свободных от нее диодов фоном, третий за статичный фон покоя. Если из кода выкинуть "второй блок" то статичный задник корректно работает, а вот шкала перестает падать, она поднимается и остается статичной пока сигнал не упадет на 0.
C++:
#define STRIP_PIN 12 // пин ленты
#define NUMLEDS 27 // число диодов в ленте
#define COLOR_DEBTH 3 // глубина цвета
#define CRT_OFF
#define STRIP_TYPE LED_WS2812
#include <microLED.h> // подключаем библиотеку
#define AUDIO_IN A0 //вход звука
#define LOW_VAL 18 //нижний порог звука
#define HI_VAL 670 //верхний порог звука
#define EXT 1.1
#define SMOOTH 0.3
microLED<NUMLEDS, STRIP_PIN, -1, STRIP_TYPE, ORDER_GRB, CLI_AVER> strip; //инициализируем ленту
int val=0,val2=0,val3=0,x=0; //обьявляем переменные
uint32_t timer; //обьявляем таймер
void setup()
{
Serial.begin(9600); //включаем порт
strip.setBrightness(255); //яркость ленты
strip.clear(); //очищаем ленту
strip.show(); //обновляем ленту
delay(1);
}
void loop()
{
mGradient< 4 > myGrad; // создать градиент с именем myGrad на 4 точки
myGrad.colors[0] = mGreen;// указываем цвет каждой точки
myGrad.colors[1] = mGreen;
myGrad.colors[2] = mOrange;
myGrad.colors[3] = mRed;
if(millis()-timer>1)
{
timer=millis();
val2=0;
val=analogRead(AUDIO_IN); //читаем вход аудио
if(val2<val)val2=val;
val2=map(val2,LOW_VAL,HI_VAL,0,500);
val2=constrain(val2,0,500);
val3=val2 * SMOOTH + val3 * (1 - SMOOTH);
x=map(val3,15,495,0,NUMLEDS); //масштабируем уровень звука в номер светодиода
x=constrain(x,0,NUMLEDS);
Serial.print(val); //отправляем всякое в порт для мониторинга
Serial.print("\t");
Serial.print(val2);
Serial.print("\t");
Serial.print(val3);
Serial.print("\t");
Serial.println(x);
}
if(val3>LOW_VAL) //если текущий уровень звука превышает минимальный порог
{
for(int i=0;i<=x;i++) //для диодов от 1 и до Х
{
strip.set(i,myGrad.get(i,NUMLEDS)); //заливаем ленту градиентом, шкала растет (блок 1)
strip.setBrightness(255);
strip.show(); //обновляем ленту
}
for(int i=NUMLEDS;i>x+1;i--) //вот эта фигня заливает фоном все что не занято самой шкалой и позволяет шкале плавно падать(назовем блок 2)
{
strip.set(i,mWheel8(200,5)); //заливаем ленту сплошным цветом-подложкой
strip.show(); //обновляем ленту
}
}
else
{
for(int i=0;i<NUMLEDS;i++) //а вот это должно заливать всю шкалу цветом когда сигнала нет(назовем блок 3)
{ //оно и работает, заливает шкалу цветом при старте
strip.set(i,mWheel8(200,5)); //но после прихода сигнала и срабатывания шкалы больше не работает
strip.show(); //пробовал и else if(val3<LOW_VAL), и разные числа подставлял вместо LOW_VAL, один фиг
//а вот если из кода выкинуть блок 2, то это все работает, но пропадает уменьшение шкалы, она только растет и полностью исчезает
} //но фон при этом работает корректно.
}
}