ESP8266 & WS2812B & fastled.h - Probleme beim fadind in/out

Hallo zusammen,

ich habe ein Problem mit folgenden Aufbau:
Meanwell LPV-100-5 (5V und 12A) und daran einen ESP8266 (NodeMCU) mit einem LED-Band WS2812B mit ca. 5m Länge. Das Ein- bzw. ausschalten funktioniert soweit ohne Probleme. Lasse ich die Helligkeit beim ein- und ausschalten über eine for-Schleife laufen, flackern die LEDs. Testweise habe ich die Anzahl der LED’s auf “1” in der Software reduziert, allerdings tritt der Fehler hier auch auf.
Hat vllt jmd eine Idee, wo der Fehler sein könnte?
Vielen Dank für eure Hilfe.

#define FASTLED_ESP8266_RAW_PIN_ORDER
#define FASTLED_ALLOW_INTERRUPTS 0
#include "FastLED.h"


#define PIR_PIN 14
#define LED_PIN 2
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS 2 //168
#define BRIGHTNESS 255  //0-255

CRGB leds[NUM_LEDS];
int movement = 0;
int blue = 140;
int red = 255;
int farbe = 0;

void setup() 
{
 Serial.begin(9600);
 delay(3000); // initial delay of a few seconds is recommended
 pinMode(PIR_PIN, INPUT);
 FastLED.addLeds<LED_TYPE,LED_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); // initializes LED strip
}

// switches off all LEDs
void showProgramCleanUp(long delayTime) {
 for (int i = 0; i < NUM_LEDS; ++i) {
   leds[i] = CRGB::Black;
 }
 FastLED.show();
 delay(delayTime);
}

void show_fadingIn(int color, long delayTime) {
 for (int i = 0; i < 255; i++) 
 {
 
    yield();
    Serial.print("Brightness:");       // print as an ASCII-encoded decimal
    Serial.println(i);       // print as an ASCII-encoded decimal
    FastLED.setBrightness(i);// global brightness
    fill_solid(leds, NUM_LEDS, CHSV(color, 200, 255)); // hue, saturation, value
    FastLED.show();
    delay(delayTime);
 }
}

void show_fadingOut(int color, long delayTime) {
 for (int i = 255; i > 1; i--) 
 {
    Serial.println(i);       // print as an ASCII-encoded decimal
    FastLED.setBrightness(i);// global brightness
    fill_solid(leds, NUM_LEDS, CHSV(color, 200, 255)); // hue, saturation, value
    FastLED.show();
    delay(delayTime);
 }
 for (int i = 0; i < NUM_LEDS; ++i) 
 {
   leds[i] = CRGB::Black;
 }
 FastLED.show();
}

// -----------------------------------------------------------------------------------------------------------

// main program
void loop() {

 //get current date & time
 movement = 0;
 showProgramCleanUp(1000); // clean up
 movement = digitalRead(PIR_PIN); 
 if (movement == HIGH)
   { 
     farbe = blue;
     show_fadingIn(farbe,1);
     for (int timer = 0; timer < 1500; timer++)
       {
         delay(0);
         Serial.println(timer);
         movement = digitalRead(PIR_PIN); 
         if (movement == HIGH)
         {
           timer = 0;
           Serial.println("timer=0");
         }
         else
         {
           delay(10);
           Serial.println(timer);
         }
       }
       
     show_fadingOut(farbe,1);
   }

 delay(250);
}

// ENDE

Hallo,

es wäre schon wenn Du uns einen Sketch zur verfügung stellst der lauffähig ist. Was sollen wir mit der Schnipsel anfangen. Vermutlich befindet sich Dein Problem in dem Teil der für uns geheim ist.

Heinz

Habs mal angepasst. Dachte allerdings, nicht das bei einem simplen Aufruf, ein Fehler ist.

Du solltest wieder Code-Tags und nicht Quote-Tags benutzen.

Gruß Tommy

eyk107:
Habs mal angepasst. Dachte allerdings, nicht das bei einem simplen Aufruf, ein Fehler ist.

Hallo,

was willlst Du uns sagen ??

lauffähig bedeutet das ich das kopieren und dann so wie es ist testen kann.

hier mal das was ich jetzt daraus gemacht habe und das läuft bei mir so wie es ist.

//#define FASTLED_ESP8266_RAW_PIN_ORDER
//#define FASTLED_ALLOW_INTERRUPTS 0
#include "FastLED.h"


//#define PIR_PIN 14
#define LED_PIN 3
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS 16
//#define BRIGHTNESS 255  //0-255

int delayTime = 10;
CRGB leds[NUM_LEDS];
//int movement = 0;
int color =200;

void setup()
{
  Serial.begin(9600);
  delay(3000); // initial delay of a few seconds is recommended
  // pinMode(PIR_PIN, INPUT);
  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); // initializes LED strip
}

void loop() {
  for (int i = 0; i <255; i++)
  {
    Serial.println(i);       // print as an ASCII-encoded decimal
    FastLED.setBrightness(i);// global brightness
    fill_solid(leds, NUM_LEDS, CHSV(color, 200, 255)); // hue, saturation, value
    FastLED.show();
    delay(delayTime);
  }

  for (int i = 255; i > 1; i--)
  {
    Serial.println(i);       // print as an ASCII-encoded decimal
    FastLED.setBrightness(i);// global brightness
    fill_solid(leds, NUM_LEDS, CHSV(color, 200, 255)); // hue, saturation, value
    FastLED.show();
    delay(delayTime);
  }
}

sorry hat sich anscheinend überschnitten

Also ist die Variante mit der for-Schleife schon korrekt? Hätte ja sein können, das es eine elegantere Variante gibt. Hatte auch gelesen, das der ESP8266-Watchdog Probleme bei längeren Schleifen macht?! Beim Arduino Nano funktionierte der Quellcode jedenfalls fehlerfrei.

eyk107:
Also ist die Variante mit der for-Schleife schon korrekt? Hätte ja sein können, das es eine elegantere Variante gibt. Hatte auch gelesen, das der ESP8266-Watchdog Probleme bei längeren Schleifen macht?! Beim Arduino Nano funktionierte der Quellcode jedenfalls fehlerfrei.

Du kannstes ja auch mit millis() machen , das wäre dann der bessere Weg. Die lib bietet auch die Möglichkeit in einm festen Zeitraster was zu machen.

EVERY_N_MILLISECONDS(100) {
tu was ;
}

Heinz

habs jetzt nochmal auf einen breakboard mit dem NodeMCU nachgebaut, und dort funktioniert alles. Anscheinend ist irgendein Fehler (Masse vllt) auf meiner gelöteten Leiterplatte :-/

Hallo,
wie hast Du den LED streifen mit Spannung versorgt ? Ich hatte mal das Problem das die Spannung (VCC mit knapp 5,3V ) zu hoch war. Aus dem ESP Datenausgang kommen max. 3,2V raus. Damit liegt das bei 5V VCC für den Strip eigendlich schon knapp ausserhalb der Spezifikation. Ich hatte dann den Efekt das sinnloses bilnken, blitzen mit falschen Farben zu sehen war. Eventuell must Du einen Level-Shifter von 3,3 auf 5V verwenden. Es geht auch mit 2 Transistoren.

Also einfach mal ein Beispiel aus der Lib mit der Hardware testen.

Heinz

Habe die LED-Streifen mit dem gleichen Netzteil wie den ESP verbunden (ca. 5,1V). Hatte es aber mit identischen Aufbau auch auf dem Breakboard nachgebaut, da ging alles :-/