• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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();
  }
 
}
 
Сверху Снизу