Стоп сигнал на WS2812b

Тема в разделе "Arduino & Shields", создана пользователем denbon, 30 янв 2017.

  1. denbon

    denbon Нуб

    Собственно говоря купил метр ленты WS2812b на 60 диодов и Ардуино Нано и хочу сделать стоп сигнал и поворотники на этой ленте.
    Скачал библиотеку Adafruit NeoPixel начал разбираться с ней пару раз пробовал залить код, но ничего не получается, то есть светодиоды горят но не так как мне нужно.
    Ни кто не мог бы мне подсказать код для моей идеи.
    Алгоритм работы таков:
    При замыкании на минус одного из пинов ардуины должны загореться светодиоды красным цветом от середины влево и право (в виде бегущих огней) и остаться гореть постоянно до момента размыкания этого пина с минусом.
    При замыкании другого пина на минус должны например загореться желтым цветом с лева от начала ленты 15 светодиодов (в виде бегущих огней)
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Стопы должны загораться сразу, чтобы было заметно. Это безопасность. Эффекты можно при выключении, но не при включении.
    Программная реализация фигня, посмотри как это сделано в примерах - адресация и последовательное включение точно есть.
     
  3. ostrov

    ostrov Гуру

    Очередной бюджетный Лексус. В чем проблема с адресными светодиодами? Там вроде бы все очень просто - проталкиваются по одному цветовые наборы в цепочку ленты. Я обычно делаю массив в котором формирую картинку и его запихиваю в ленту.
     
    Последнее редактирование: 31 янв 2017
  4. denbon

    denbon Нуб

    набросал быстренько код

    Код (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);
    }

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