WS2811 задание параметров при старте
- Войдите на сайт для отправки комментариев
Чт, 22/02/2018 - 10:19
Всем привет!
Вот и я решил приобщиться к 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;
}
У кого вы подсмотрели строку #13 ?
Сам попробовал. Ошибки вроде компилятор не дает..
Неправильно?
Если компилятор ошибки не дает, то правильно. Но бессмысленно.
Вот в стр.26 вы ко всем элементам страйпа применяете некое действие. Наверное логично было бы так же во все элементы страйпа поместить число, обозначающее "зеленый", так?
Вот, к примеру, на https://github.com/FastLED/FastLED/wiki/Basic-usage , начиная с раздела "Writing an led" приводятся примеры того, что вы пытаетесь сделать.
За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; }Вашу ссылку читаю.
Ну вы же словами человечьими всё уже описали, почему в программе делаете иначе?
1) Выставили яркость в 0;
2) Первый цикл: все элементы массива => "зеленый цвет".
3) Второй цикл: увеличиваете яркость от нуля до нужного уровня.
Всего-то и надо было, что на стр. 13 произвести действие №2.
Поштудировал и сделал так:
#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); } }Работает. Всем спасибо.