WS2811 задание параметров при старте

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018

Всем привет!

Вот и я решил приобщиться к Arduino и приобрел Uno и ktyne 2811 5 вольт

Собрал схему, загрузил примеры, всё нормально.

Теперь решил программировать самому.

Есть небольшой опыт программирования на PHP.

Поставил себе задачу сделать следующий алгоритм: при включении на всех светодиодах установить яркость в 0 и задать цвет, например, зеленый. Затем плавно вывести яркость на максимум (255).

Бьюсь - не получается.

Подскажите пожалуйста как сделать, потому как у меня пока что первые шаги, не дайте упасть :-)

Вот код:

#include "FastLED.h"
#define NUM_LEDS 50  // всего светодиодов в ленте
CRGB leds[NUM_LEDS];
#define PIN 13 // Пин для команд
#define COLOR_ORDER RGB
int fadeAmount = 1;  
int brightness = 0; 

void setup()
{
  FastLED.addLeds<WS2811, PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(0); // все светодиоды выключаются (яркость 0)
  CRGB::Green; // все светодиоды в зеленый цвет
}

void loop()
{ 
  fade_in(brightness, fadeAmount); // плавное нарастание яркости

}

void fade_in(int brightness, int fadeAmount) 
{
   for(int i = 0; i < NUM_LEDS; i++ )
   {
     leds[i].fadeLightBy(brightness);
   }
  FastLED.show();
  brightness = brightness + fadeAmount; 
}

 

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

У кого вы подсмотрели строку #13 ?

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018

Сам попробовал. Ошибки вроде компилятор не дает..

Неправильно?

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

Если компилятор ошибки не дает, то правильно. Но бессмысленно. 

Вот в стр.26 вы ко всем элементам страйпа применяете некое действие. Наверное логично было бы так же во все элементы страйпа поместить число, обозначающее "зеленый", так? 

Вот, к примеру, на https://github.com/FastLED/FastLED/wiki/Basic-usage , начиная с раздела "Writing an led" приводятся примеры того, что вы пытаетесь сделать.

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018

ЗаREMил строку 13, добавил в цикле установку цвета светодиода в зеленый. Не разгораются светодиоды.

ЗаREMил строку 12. Теперь при запуске все светодиоды зеленые и сразу светятся. а я хотел что бы они плавно разгорелись.

#include "FastLED.h"
#define NUM_LEDS 50  // всего светодиодов в ленте
CRGB leds[NUM_LEDS];
#define PIN 13 // Пин для команд
#define COLOR_ORDER RGB
int fadeAmount = 1;  
int brightness = 0; 

void setup()
{
  FastLED.addLeds<WS2811, PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  //FastLED.setBrightness(0); // все светодиоды выключаются (яркость 0)
  //CRGB::Green; // все светодиоды в зеленый цвет
}

void loop()
{ 
  fade_in(brightness, fadeAmount); // плавное нарастание яркости

}

void fade_in(int brightness, int fadeAmount) 
{
   for(int i = 0; i < NUM_LEDS; i++ )
   {
     leds[i] = CRGB::Green; 
     leds[i].fadeLightBy(brightness);
   }
  FastLED.show();
  brightness = brightness + fadeAmount; 
}

Вашу ссылку читаю.

 

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

Ну вы же словами человечьими всё уже описали, почему в программе делаете иначе?

1) Выставили яркость в 0;

2) Первый цикл: все элементы массива => "зеленый цвет".

3) Второй цикл: увеличиваете яркость от нуля до нужного уровня.

Всего-то и надо было, что на стр. 13 произвести действие №2. 

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018

Поштудировал и сделал так:

#include "FastLED.h"
#define NUM_LEDS 50  // всего светодиодов в ленте
CRGB leds[NUM_LEDS];
#define PIN 13
#define COLOR_ORDER RGB

int ibright = 0;
int thishue = 96;
int thissat = 255;
int thisdelay = 50;

void setup()
{
  FastLED.addLeds<WS2811, PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  all_leds_off(0, 0, 0);          // погасить все светодиоды
  LEDS.show();                    // отослать команду  
}

void loop()
{ 
  fade_in(); // плавное нарастание яркости
}

void fade_in() 
{
  for (int ib = 0 ; ib < 255; ib++ )
    {
      ibright++;      
      for (int i = 0 ; i < NUM_LEDS; i++ ) 
        {
          leds[i] = CHSV(thishue, thissat, ibright);
        }
      LEDS.show();
      delay(thisdelay);
    }   
}

void all_leds_off(int cred, int cgrn, int cblu) 
{
  for (int i = 0 ; i < NUM_LEDS; i++ ) 
  {
    leds[i].setRGB( cred, cgrn, cblu);
  }
}

Работает. Всем спасибо.