• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Странно работает WS2812 (FastLed.h) и ESP8266 (Wemos D1 mini)

SergeyIL

New member
Суть в следующем, пробовал на ESP-01(2 вывод) и Wemos D1 mini (4 вывод на ленту), формируется массив с цветами ленты, и раз в секунду через delay(1000) вызывается FastLED.show();
Но почему-то обновление ленты происходит нерегулярно! После включения идут 3-5 миганий точек в часах (или цвет или #000000 при каждом вызове)
Судя по отладке в моей части все регулярно обновляется в массиве, дело в библиотеке FastLed 3.4.0

Cкетч.
 

SergeyIL

New member
Да про это уже прочитал, пробовал и ноль диодом поднимать и питание ленты до 4,5 В опускать и в комбинации. Попробую еще с транзистором.


Причем прошил скетч конфети:
C:
#include "FastLED.h" // подключаем библиотеку фастлед

byte bright = 50; // яркость LED светодиодов
byte baza = 0;     // изменение оттенка LED

#define NUM_LEDS 100
#define PIN 4
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(bright);
}

void loop() {
    fadeToBlackBy(leds, NUM_LEDS, 2);
    int pos = random16(NUM_LEDS);
    leds[pos] += CHSV(baza++ + random8(64), 200, 255);
    FastLED.setBrightness(bright);
    FastLED.show();
}

Светодиоды красиво переливаются... Правда встречаются негорящие. А в проге какой то бубль гум, причем же раньше все работало! Трамблы начались когда решил поэкспериментировать с ESP-01 ну и кнопки добавить на 0 -й вывод
 

SergeyIL

New member
Может быть, спаял входную цепь на транзисторе и ничего не поменялось. Ну перепаяю управляющие переходы, посмотрим что получится...
 

SergeyIL

New member
Я вообще в шоке, загрузил скетч проверочный, последовательно должен загорать синий, зеленый, красный и белый, так вот синий и зеленый не горят!!! пауза, красный, белый и все. Горят все светодиоды, по идее сигнал проходит?! А в часах у меня как раз сине-зеленый стоит...
C-like:
#include "FastLED.h" // подключаем библиотеку фастлед

byte bright = 50; // яркость LED светодиодов
byte baza = 0;     // изменение оттенка LED

#define NUM_LEDS 74
#define PIN 4
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(bright);
}

void loop() {
  for(int i=0; i<NUM_LEDS; i++) {
    leds[i]= CHSV(0, 0, 255); // задаем для первого пикселя синий цвет
  }
  FastLED.show();
  delay(2500);

  for(int i=0; i<NUM_LEDS; i++) {
    leds[i]= CHSV(255, 0, 0); // задаем для первого пикселя зеленый цвет
  }
  FastLED.show();
  delay(2500);

  for(int i=0; i<NUM_LEDS; i++) {
    leds[i]= CHSV(0, 255, 0); // задаем для первого пикселя красный цвет
  }
  FastLED.show();
  delay(2500);

  for(int i=0; i<NUM_LEDS; i++) {
    leds[i]= CHSV(255, 255, 255); // задаем для первого пикселя синий цвет
  }
  FastLED.show();
  delay(2500);

}
 

SergeyIL

New member
Методом научного тыка нашел неисправность. Оказалось что в коде была функция delay(1000);
Изменил основной цикл и все нормально заработало.
C++:
void loop() {

  unsigned long currentMillis = millis();

  // Опрос часов и вывод на экран происходит один раз в секунду (константа interval)
  if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
    
    if (digitalRead(CLBUTTOM) == HIGH) {              // Летнее или зимнее время
      timeClient.setTimeOffset(10800); // Serial.println("HIGH");
    } else {
      timeClient.setTimeOffset(7200);  // Serial.println("LOW");
    }

// Следующие строки гарантируют, что мы получим правильную дату и время:
while(!timeClient.update()) {
      timeClient.forceUpdate();
    }
// Примечание: иногда NTP-клиент извлекает 1970-е годы. Чтобы этого не произошло, нам нужно принудительно установить обновление.

    hour = timeClient.getHours();    // Часы
    minute = timeClient.getMinutes();// Минуты
      
    // Смена режима часовых точек
    if (Dot) Dot = false;
      else Dot = true;
      
    TimeToArray(); FastLED.show();
  }
 
}
 
Сверху Снизу