VU метр на адресной ленте WS 2812. помогите разобраться

Falcon689
Offline
Зарегистрирован: 01.04.2021

Приветствую всех, собственно зарегился дабы спросить совета.

Суть такова, купил адресную ленту на WS 2812, задумка сделать цветомузыку(знаю что есть готовые решения, но хочется хоть немного вникнуть в вопрос, бездумно скопировать всегда успею), вся установка будет 2 вертикальных VUметра по бокам от монитора и горизонтальная полоса на полке над столом(что будет там еще не думал). Застрял на VUметре, экспериментирую с лентой 27 диодов, в целом убив пару дней получил вполне неплохой результат, шкала работает даже с хреновым микрофоном(хорошие микрофоны едут). Идея такова: на ленте горит постоянно тускло задник(некий цвет) и при работе VUметра на диодах зажигаемых самой шкалой задник гаснет, потом загорается снова. Это как бы работает, проблема в том, что когда сигнал ==0, лента гаснет полностью(иногда тускло светит первый диод, хз почему) при появлении минимального сигнала на вход(пробовал микрофон и потенциометр) шкала работает,все не занятые шкалой диоды светятся фоновым цветом.

Подскажите как сделать чтобы при пропадании сигнала на AUDIO_IN продолжал гореть задник, желательно на пальцах как маленькому))

#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 и до Х (это сама шкала, назовем блок1)
    {
      strip.set(i,myGrad.get(i,NUMLEDS)); //заливаем ленту градиентом 
      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, то это все работает, но пропадает уменьшение шкалы, она только растет и полностью исчезает
    }                                              //но фон при этом работает корректно.
    }
}
  

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Falcon689 пишет:

 проблема в том, что когда сигнал ==0, лента гаснет полностью

Пока бывалые не ответили, совет от новичка:

А если сделать всегда сигнал = сигнал + 1 ?

 

Falcon689
Offline
Зарегистрирован: 01.04.2021

Дим-мычъ пишет:

Falcon689 пишет:

 проблема в том, что когда сигнал ==0, лента гаснет полностью

Пока бывалые не ответили, совет от новичка:

А если сделать всегда сигнал = сигнал + 1 ?

 


Можно конечно поиграться с настройкой LOW_VAL,выставить =0, чтобы фоновый шум зажигал 1 диод в шкале, это вроде должно решить проблему, но пока хочется разобраться.

Falcon689
Offline
Зарегистрирован: 01.04.2021

Поигравшись еще немного, отключил яркость у цвета в блоке 2, убрал задник при работе, а в блоке 3, так сказать задник покоя оставил все как есть и заметил что при работе шкалы задник иногда промигивает, и это задник покоя, т.к задник блока 2 имеет яркость 0. Убрав яркость у задника покоя убрал и всякие промигивания задника. Тоесть код то пытается работать, просто я как то не так все написал, наверняка проблема на поверхности.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Так я и предложил сделать это , чтобы разобраться легче было...выяснить, в этом дело, или ещё в чём

sadman41
Offline
Зарегистрирован: 19.10.2016

А у гайвера на форуме не помогают с этим поделием бороться?

Я бы, как минимум, вынес show() и пр. из циклов, да обновлял бы страйп только когда уровень действительно изменился, а не долбил беспрестанно в шину.

Falcon689
Offline
Зарегистрирован: 01.04.2021

Ага,спасибо, попробую. От меня как то ускользнула такая очевидная вещь что если .show() в цикле то лента будет обновляться с каждым шагом цикла.

З.Ы. обновлять страйп только когда изменился, как это реализовать? как то так?(код ниже)

for(int i=0;i<x;i++) //для диодов от 1 и до Х 
    {
      strip.set(i,myGrad.get(i,NUMLEDS)); //заливаем ленту градиентом, шкала растет (блок 1)
    }
      x=y;
      strip.setBrightness(255);
      if(x!=y)strip.show(); //обновляем ленту если Х изменился

 

sadman41
Offline
Зарегистрирован: 19.10.2016

strip.setBrightness(255) зачем в лупе? Он уже в сетапе есть.

Обновление по изменению - это когда предыдущее значение уровня звука не равно текущему.

Falcon689
Offline
Зарегистрирован: 01.04.2021

Без настройки яркости в лупе яркость шкалы равна 100, независимо от того, сколько указано в сетапе, уменьшить ниже 100 можно, уменьшается, увеличить никак, все что выше 100 все равно светит как 100. И убрать ее нельзя, кмк это связано с тем,что яркость подложки 5 и она сажает всю ленту на эту яркость. Честно я хз как это работает, экспериментально получилось сделать яркую шкалу и тусклый задник вот так вот, с двумя яркостями. Я только с этим день убил.

sadman41
Offline
Зарегистрирован: 19.10.2016

Не вижу ничего, что могло бы делать strip.setBrightness(100). Разве что гайверовская библиотека работает, как написана...
Взяли бы FastLed и не страдали ерундой с микроледами этими

Falcon689
Offline
Зарегистрирован: 01.04.2021

Переписал на FastLED, все заработало, правда пока шкала одноцветная. Осталось разобраться как сделать градиент.

b707
Offline
Зарегистрирован: 26.05.2017

Falcon689 пишет:

Осталось разобраться как сделать градиент.


через цветовое пространство HSV

sadman41
Offline
Зарегистрирован: 19.10.2016

http://fastled.io/docs/3.1/group___colorutils.html#ga3144bb2bb66aeed33e2...

void fill_gradient_RGB (CRGB *leds, uint16_t numLeds, const CRGB &c1, const CRGB &c2)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:
Falcon689 пишет:

Осталось разобраться как сделать градиент.

через цветовое пространство HSV

Ну, ТС же сказал, что разобраться хочет!

Falcon689, в итоге Вы сделаете так, как Вам сказали, ибо это правильный подход. Но чтобы Вам именно на пальцах разобраться, я могу на пальцах рассказать как делается любой плавный переход от одного цвета к другому. И не только цвета.

Итак, у Вас есть три независимые составляющие цвета - r, g и b. Тогда, если Вы представите трёхмерное пространство с осями R, G и B, то любой цвет будет точкой в этом пространстве. Предположим, у нас есть два цвета C1 (равный r1, g1 и b1) и C2 (равный r2, g2 и b2). Нарисуем эти цвета в виде двух точек в пространстве RGB и соединим их отрезком.

Теперь, чтобы сделать плавный переход от цвета C1 к цвету C2 достаточно разбить этот отрезок на нужное количество равных частей и взять получившиеся на нём точки в качестве промежуточных цветов. На рисунке ниже я показал промежуточные цвета от руки, может не очень точно, но, надеюсь, идея понятна.

ну, а вычислить координаты (r, g и b) этих промежуточных цветов не составляет труда, если геометрия за 7-ой класс не совсем выветрилась

Falcon689
Offline
Зарегистрирован: 01.04.2021

sadman41 пишет:

http://fastled.io/docs/3.1/group___colorutils.html#ga3144bb2bb66aeed33e2...

void fill_gradient_RGB (CRGB *leds, uint16_t numLeds, const CRGB &c1, const CRGB &c2)

Мне бы еще понять что с этим делать, я потому и использовал библиотеку Гайвера, что не смог понять как в этой воспользоваться градиентами. Кто нибудь может дать реальный пример? Я даже не понимаю в какую часть кода это пихать. В сетап не хочет, отдельный войдом не хочет.

b707
Offline
Зарегистрирован: 26.05.2017

Falcon689 пишет:

sadman41 пишет:

http://fastled.io/docs/3.1/group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98

void fill_gradient_RGB (CRGB *leds, uint16_t numLeds, const CRGB &c1, const CRGB &c2)

Мне бы еще понять что с этим делать, я потому и использовал библиотеку Гайвера, что не смог понять как в этой воспользоваться градиентами. Кто нибудь может дать реальный пример?

судя по вопросу, вы не градиентами пользоваться не умеете, а вообще о программировании на Си имеете очень смутное представление... И что вы предлагаете - начать вас учить с нуля. что такое функции и что такое парметры?

Цитата:
Я даже не понимаю в какую часть кода это пихать. В сетап не хочет, отдельный войдом не хочет.

Вы тот код, что пытаетесь исправить - хоть чуть-чуть понимаете? У вас в нем градиент формировался в строке 56. Вот примерно туда и пихайте.

 

Falcon689
Offline
Зарегистрирован: 01.04.2021

С этим все понятно, градиент с изменяющимися в цикле компонентами RGB вполне работает, но при этом начинает моргать вся лента. Хотелось бы понять как пользоваться инструментами библиотеки для создания градиентов, а я никак не могу понять что куда писать из её документации.(

b707
Offline
Зарегистрирован: 26.05.2017

Falcon689 пишет:

Хотелось бы понять как пользоваться инструментами библиотеки для создания градиентов, а я никак не могу понять что куда писать из её документации.(

я не разбирался с "инструментами библиотеки". а делал "градиент" вручную с помощью HSV цвета. Если задавать цвет как HSV(color, 255,255). то меняя color от 0 до 255 вы получаете все оттенки радуги от красного до красного. Если для градиента нужна только часть радуги - берете часть диапазона.

Единственный минус - разрешение по цвету получается 8бит на весь цветовой круг. Но для небольших гирлянд этого хватает.

Falcon689
Offline
Зарегистрирован: 01.04.2021

b707 пишет:

Вы тот код, что пытаетесь исправить - хоть чуть-чуть понимаете? У вас в нем градиент формировался в строке 56. Вот примерно туда и пихайте.

 

Понимаю, сейчас код поменял, переехал на библиотеку FastLed. там задники работают, все ок. Я хочу для шкалы использовать градиент на 4 цвета, как в варианте у Гайвера, чтобы градиент условно делил участок лента на 4 части и заливал их цветами с переходом(зеленый-зеленый-желтый-красный). Насколько я понимаю мне подойдет вот эта вот функция 

void  fill_gradient_RGB (CRGB *leds, uint16_t numLeds, const CRGB &c1, const CRGB &c2, const CRGB &c3, const CRGB &c4)

понятно что это функция, я ее ставлю в 51 строчку,прописываю цвета, а вот что такое *leds и numleds? Понятно что некоторые переменные для настройки, что конкретно я должен туда написать чтобы компиллятор понял чего я хочу, у него то переменная не обьявлена, то слишком много численных данных, то еще какая то ошибка.

И да, я совершенно не разбираюсь в программировании на С++, я потыюсь хоть как то вникнуть в это, и мне это ппц как трудно дается.

#include "FastLED.h"
#define NUMLEDS 27 // Указываем, какое количество пикселей у нашей ленты.
#define LED_PIN 12 // Указываем, к какому порту подключен вход ленты DIN.
#define AUDIO_IN A0
#define STRIP_TYPE WS2812B
#define LOW_VAL 18 //нижний порог звука
#define HI_VAL 759 //верхний порог звука
#define EXT 1.1
#define SMOOTH 0.4
int val=0,val2=0,val3=0,x=0; //обьявляем переменные
uint32_t timer,timer2; //обьявляем таймер
CRGB strip[NUMLEDS]; // Создаем переменную strip для управления нашей лентой.

void setup()
{
  Serial.begin(9600);
  FastLED.addLeds<STRIP_TYPE, LED_PIN, GRB>(strip, NUMLEDS).setCorrection(TypicalLEDStrip); // Добавляем ленту
  FastLED.setBrightness(255); //настройка яркости
  
}


void loop()
{
   if(millis()-timer>10)
    {
      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);
      val2=pow(val2,EXT);
      val3=val2 * SMOOTH + val3 * (1 - SMOOTH);
      
      x=map(val3,0,472,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++)
  {
  strip[i] = CRGB::Red;
  } 
  FastLED.show(); // Передаем цвета ленте.
  for(int i = NUMLEDS;i>x;i--)
  {
    strip[i]  = CRGB::Black;
  }
  FastLED.show();
  }
 else
    {
      for(int i=0;i<NUMLEDS;i++)
      {
    strip[i] = CRGB::Black; 
      }
  FastLED.show(); // Передаем цвета ленте.
}
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Falcon689 пишет:

вот эта вот функция 

void  fill_gradient_RGB (CRGB *leds, uint16_t numLeds, const CRGB &c1, const CRGB &c2, const CRGB &c3, const CRGB &c4)

понятно что это функция, я ее ставлю в 51 строчку,прописываю цвета, а вот что такое *leds и numleds?

*leds - ссылка на массив данных для ленты. у вас он называется strip

numleds - очевидно, число ЛЕДов (вы английский также знаете, как и Си)

А вообще. все параметры функции можно посмотреть в исходном коде библиотеки. Ну или в описании. если оно есть. Но довольно часто описаний к библиотекам нет, только код.

 

Falcon689
Offline
Зарегистрирован: 01.04.2021
  strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)

Вставил в таком виде, пишет Arduino: 1.8.13 (Linux), Плата:"Arduino Uno"

In file included from /home/falcon689/snap/arduino/50/Arduino/Lenta_1/Lenta_1.ino:1:0:
/home/falcon689/snap/arduino/current/Arduino/libraries/FastLED-master/src/FastLED.h:14:21: note: #pragma message: FastLED version 3.004.000
 #    pragma message "FastLED version 3.004.000"
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/falcon689/snap/arduino/50/Arduino/Lenta_1/Lenta_1.ino: In function 'void loop()':
Lenta_1:51:38: error: expected primary-expression before 'strip'
   strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                      ^~~~~
Lenta_1:2:17: error: expected primary-expression before numeric constant
 #define NUMLEDS 27 // Указываем, какое количество пикселей у нашей ленты.
                 ^
/home/falcon689/snap/arduino/50/Arduino/Lenta_1/Lenta_1.ino:51:54: note: in expansion of macro 'NUMLEDS'
   strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                                      ^~~~~~~
Lenta_1:51:63: error: expected primary-expression before 'const'
   strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                                               ^~~~~
Lenta_1:51:86: error: expected primary-expression before 'const'
   strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                                                                      ^~~~~
Lenta_1:51:109: error: expected primary-expression before 'const'
   strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                                                                                             ^~~~~
Lenta_1:51:133: error: expected primary-expression before 'const'
   strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                                                                                                                     ^~~~~
exit status 1
expected primary-expression before 'strip'
 
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
Falcon689
Offline
Зарегистрирован: 01.04.2021

Функцию же я должен обьявить отдельно, до лупа, а потом просто вызвать ее в нужный момент. Сделал так 

void fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)

жалуется на вторую строчку (#define NUMLEDS 27) 

Arduino: 1.8.13 (Linux), Плата:"Arduino Uno"
 
In file included from /home/falcon689/snap/arduino/50/Arduino/Lenta_1/Lenta_1.ino:1:0:
/home/falcon689/snap/arduino/current/Arduino/libraries/FastLED-master/src/FastLED.h:14:21: note: #pragma message: FastLED version 3.004.000
 #    pragma message "FastLED version 3.004.000"
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
Lenta_1:2:17: error: expected ',' or '...' before numeric constant
 #define NUMLEDS 27 // Указываем, какое количество пикселей у нашей ленты.
                 ^
/home/falcon689/snap/arduino/50/Arduino/Lenta_1/Lenta_1.ino:22:46: note: in expansion of macro 'NUMLEDS'
 void fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)
                                              ^~~~~~~
Lenta_1:24:1: error: expected initializer before 'void'
 void loop()
 ^~~~
exit status 1
expected ',' or '...' before numeric constant
 
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 

 

b707
Offline
Зарегистрирован: 26.05.2017

Falcon689 пишет:

Функцию же я должен обьявить отдельно, до лупа

если это функция библиотеки, то она уже обьявлена в библиотеке. А если вы ее сами придумали - то ее не только обьяывить, в ней еще и действия какие-то прописать надо :)

 

Falcon689
Offline
Зарегистрирован: 01.04.2021

Про функции мне понятно, у меня в РУ машине все движения написаны функциями. В общем возвращаюсь к варианту с библиотекой Гайвера, там оно было красивее и понятнее, в FastLED  все работает пока цвета даны в формате RGB, при попытке задать разную яркость отдельно шкале и задникам ломается к хренам математика и переменная val3 начинает принимать рандомные значения,в том числе и отрицательные.

b707
Offline
Зарегистрирован: 26.05.2017

Falcon689 пишет:

в FastLED  все работает пока цвета даны в формате RGB, при попытке задать разную яркость отдельно шкале и задникам ломается к хренам математика и переменная val3 начинает принимать рандомные значения,в том числе и отрицательные.

это, без сомнения, библиотека FastLED виновата, что ваша переменная val3 принимает отрицательные значения?

 

Вам надо начать не с правки кода. что вы сейчас делаете наобум - а с чтения учебников, хотя бы самых элементарных.  Когда вы перестанете пытаться вызывать функцию подобным образом:

strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)

- тогда и приходите.

А пока разговаривать с вами не о чем. Это как младенцу устройство синхрофазотрона обьяснять. я такое не умею, мож кто другой поможет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Falcon689 пишет:

градиент с изменяющимися в цикле компонентами RGB вполне работает, но при этом начинает моргать вся лента. 

Ну, это вопрос к Вашей программе, а вовсе не к способы получения градиента :-)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Falcon689 пишет:

  strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)

Вставил в таком виде

Зачем?

У Вас есть какая-нибудь книжка по С/С++? Или посоветовать?

Пока Вы "вставляете в таком виде" Вам не поможет никакая волшебная библиотека.

Falcon689
Offline
Зарегистрирован: 01.04.2021

ЕвгенийП пишет:

Falcon689 пишет:

  strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)

Вставил в таком виде

Зачем?

У Вас есть какая-нибудь книжка по С/С++? Или посоветовать?

Пока Вы "вставляете в таком виде" Вам не поможет никакая волшебная библиотека.


Посоветуйте пожалуйста. Начинал с Джереми Блума, ардуино для начинающих, а дальше по наитию)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вам нужен язык, а не "ардуино для начинающих".

Читать надо вот это. Оно совсем не про ардуино - оно про язык на котором Вы пытаетесь писать не зная его. Но, если Вы совсем никогда не программировали, то, возможно, для Вас это сложновато. Тогда попробуйте начать с вот этого. Это больше про Ардуино, но это совсем примитивно для блондинок и беременных доярок. Но если Вы хотя бы это будете твёрдо знать, то количество бреда, вроде того, который я цитировал, сильно поубавится. Попробуйте

Falcon689
Offline
Зарегистрирован: 01.04.2021

Просмотрел то, что для доярок, все описанное там Джереми Блум вполне неплохо разжевал, и ничего нового я там не нашел. Как бы на этой основе РУ машинка с подвесом камеры на сервах работает.  Попробую почитать ту, что посложнее, там реально много для меня нового. Спасибо за совет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если Вы там не нашли ничего нового, и Вам известно всё, что там написано, то кто же, простите, написал вот это:

Falcon689 пишет:

  strip[i] = fill_gradient_RGB (CRGB strip, uint16_t NUMLEDS, const CRGB::Green &c1, const CRGB::Green &c2, const CRGB::Orange &c3, const CRGB::Red &c4)

Вставил в таком виде

Там написано как нужно вызывать функции. Хотя, если Вы не изучили а только 

Falcon689 пишет:
Просмотрел
то, неудивительно. Такие вещи надо изучать и знать, а не просматривать.

sadman41
Offline
Зарегистрирован: 19.10.2016

Тут достаточно простого скилла гуглопоиска: https://github.com/atuline/FastLED-Demos/blob/master/fill_grad/fill_grad...