Собственно говоря купил метр ленты WS2812b на 60 диодов и Ардуино Нано и хочу сделать стоп сигнал и поворотники на этой ленте. Скачал библиотеку Adafruit NeoPixel начал разбираться с ней пару раз пробовал залить код, но ничего не получается, то есть светодиоды горят но не так как мне нужно. Ни кто не мог бы мне подсказать код для моей идеи. Алгоритм работы таков: При замыкании на минус одного из пинов ардуины должны загореться светодиоды красным цветом от середины влево и право (в виде бегущих огней) и остаться гореть постоянно до момента размыкания этого пина с минусом. При замыкании другого пина на минус должны например загореться желтым цветом с лева от начала ленты 15 светодиодов (в виде бегущих огней)
Стопы должны загораться сразу, чтобы было заметно. Это безопасность. Эффекты можно при выключении, но не при включении. Программная реализация фигня, посмотри как это сделано в примерах - адресация и последовательное включение точно есть.
Очередной бюджетный Лексус. В чем проблема с адресными светодиодами? Там вроде бы все очень просто - проталкиваются по одному цветовые наборы в цепочку ленты. Я обычно делаю массив в котором формирую картинку и его запихиваю в ленту.
набросал быстренько код Код (C++): #include "FastLED.h" // Подключаем библиотеку для управления светодиодами #define NUM_LEDS 59 // количество светодиодов в ленте #define DATA_PIN 6 CRGB leds[NUM_LEDS]; const int pinStop = A1; // пин для стопа const int pinLeft = A2; // пин левого поворотника const int pinRight = A3; // пин правого поворотника int butStop = 0; // переменная для хранения состояния кнопки int butLeft = 0; // переменная для хранения состояния кнопки int butRight = 0; // переменная для хранения состояния кнопки void setup() // Объект ленты настраивается в функции setup { pinMode(pinStop, INPUT); pinMode(pinLeft, INPUT); pinMode(pinRight, INPUT); digitalWrite(pinStop, HIGH); // вкл.подтягивающий резистор digitalWrite(pinLeft, HIGH); // вкл.подтягивающий резистор digitalWrite(pinRight, HIGH); // вкл.подтягивающий резистор FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS); // Тип контроллера, номер пина данных, номер пина синхр., тип развертки, массив значений и его длина LEDS.setBrightness(255); // яркость ленты (1...255) } void loop() { butStop = digitalRead(pinStop); // считываем значения с входа кнопки butLeft = digitalRead(pinLeft); // считываем значения с входа кнопки butRight = digitalRead(pinRight); // считываем значения с входа кнопки if (butStop == LOW) { // если кнопка СТОПА нажата (замкнута на землю) for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) { leds[whiteLed] = CRGB::Green; leds[NUM_LEDS - whiteLed] = CRGB::Green; FastLED.show(); delay(1); } } if (butStop == HIGH) { // если кнопка стопа выключена for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) { //Зажигаем первый светик leds[whiteLed] = CRGB::Black; leds[NUM_LEDS - whiteLed] = CRGB::Black; FastLED.show(); delay(10); } } } но вот только в цикле for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) { leds[whiteLed] = CRGB::Green; leds[NUM_LEDS - whiteLed] = CRGB::Green; FastLED.show(); delay(1); } не могу сообразить как сделать так, чтобы светодиоды начинали загораться с центра к краям