ws2812b alle Leds an und aus schalten

Hi User,

ich bin kein Pro oder Programmierer :wink:

ich nutze folgenden Code:

https://codingworld.io/project/fastled-am-arduino-mit-ws2812b

Oben den Standart, hier werden die einzelnen Leds in den Farben durchgeschaltet.
Das funktioniert auch.

Hier wird auch die erste Led in den Farben durchgeschaltet.

Nun wollte ich das alle Leds das durchlaufen.

Hab das dann mal so umgesetzt:

#include "FastLED.h"

#define ANZAHL_LEDS 40
#define LED_PIN 6
int i = 0;
CRGB leds[ANZAHL_LEDS];

void setup() {
  FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, ANZAHL_LEDS);
}

void loop() {
  
  //Leds Ausschalten
  i = 0;
  leds[i] = CRGB::Black;
  for (int i=0;i<=40;i++){
  leds[i] = CRGB::Black;
  delay(10);
  }
  FastLED.show();
  delay(1000);
  
  i = 0;
  leds[i] = CRGB::Blue;
  for (int i=0;i<=40;i++){
  leds[i] = CRGB::Blue;
  delay(10);
  }
  FastLED.show();
  delay(1000);
}

Alle Leds gehen an und aus das passt schon mal.

Jedoch nur jede dritte Led ist Blau.
Also Blau, Rot, Grün und wieder Blau, so setzt sich das fort.

Woran liegt das?
Ja 30cm vor dem Bildschirm :wink:

Dann ist mir noch was aufgefallen, ich hab hier 40 Leds angegeben, habe aber nur 30 Leds, wenn ich aber
30 Leds eintrage, leuchten nicht alle Leds.

Woran liegt das?

Für einen Tip und etwas Hilfe wäre ich Dankbar.

Gruß Levi

Wenn Du bei FastLED alle Leds mit einer Farbe leuchten lassen willst:

FastLED.showColor(farbwert);
FastLED.show();

Gruß Tommy

Danke @Thommy56.

Wie kann ich den die farbwerte angeben?

Ist das so ok?

FastLED.showColor(CRGB::Blue);
FastLED.show();

Hallo,

ich tippe da ehr auf ein Hardware Problem, eigentlich sollte das laufen. Es gibt zwar ein paar Zeilen die überflüssig sind, das sollte aber kein Problem sein. Lass doch mal nur je eine LED als Lauflicht laufen um das Thema Stromversorgung erst mal auszublenden. Wenn das klappt nimmst Du rot und grün

Etwa so

Heinz

nicht getestet

#include "FastLED.h"

#define ANZAHL_LEDS 30
#define LED_PIN 6
int i = 0;
CRGB leds[ANZAHL_LEDS];

void setup() {
  FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, ANZAHL_LEDS);
}

void loop() {
  //Leds Ausschalten

  for (int i = 0; i < ANZAHL_LEDS; i++) {
    leds[i] = CRGB(0,0,0;
  }
  FastLED.show();

  for (int i = 0; i < ANZAHL_LEDS; i++) {
    leds[i] = CRGB(255,0,0; // rot (0,255,0 ) grün (0,0,255) blau
    FastLED.show();
    delay(200);

  }
  delay(1000);
}

Schau dir mal die Beispiele aus der Lib an

Hallo @Rentner,

23 der LEDs gehen an und wenn die letzte erreicht ist gehen alle aus.

Ich nutze den Arduino Nano mit dem OldBootLoader.

Es sind aber nicht nur Rote Leds,
erst ist eine Rote,Grüne und Blaue, das wiederholt sich.

Nach diesem Code:

#include "FastLED.h"

#define ANZAHL_LEDS 40
#define LED_PIN 6
int i = 0;
CRGB leds[ANZAHL_LEDS];

void setup() {
  FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, ANZAHL_LEDS);
}

void loop() {
  //Leds Ausschalten

  for (int i = 0; i < ANZAHL_LEDS; i++) {
    leds[i] = CRGB(0,0,0);
  }
  FastLED.show();

  for (int i = 0; i < ANZAHL_LEDS; i++) {
    leds[i] = CRGB(255,0,0); // rot (0,255,0 ) grün (0,0,255) blau
    FastLED.show();
    delay(200);

  }
  delay(1000);
}

Nur wenn ich 40 LEDs angebe werden alle 30 LEDs angesprochen.

Hallo,

wenn ich nicht einen Fehler eingebaut habe sollte eigendlich immer nur eine LED leuchten, dann die nächste usw.

Der Nano ist ein 5V Type ? Stromversorgung hast Du wie realisiert ?

Sollte eigendlich egal sein denke ich

versuch mal die Zeile , die benutze ich

 FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, ANZAHL_LEDS);

Ja eine nach der anderen Leuchtet und wenn alle an sind gehen alle aus und es fängt von vorne an.

Je nach dem welche Farbe ich einstelle ändert sich immer nur die erste Led zur eingestellten Farbe,
dann kommen andere Farben.

Stromversorgung geht beim Programmieren über einen USB Hub mit Stromversorgung, wenn alles Läuft
über eine externe Stromversorgung.

Hab es Jetzt noch mit der Externen Stromversorgung getestet, das Ergebniss ist das gleiche.

Hab das von dir

FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, ANZAHL_LEDS);
}

getestet, das Ergebniss ist das gleiche.

Hallo,

ok ich hatte eine Fehler drin, nimm mal den , es sollte imme nur eine leuchten , nie alle

#include "FastLED.h"

#define ANZAHL_LEDS 30
#define LED_PIN 6
int i = 0;
CRGB leds[ANZAHL_LEDS];

void setup() {
  FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, ANZAHL_LEDS);
}

void loop() {
 

  for (int i = 0; i < ANZAHL_LEDS; i++) {
    leds[i] = CRGB(255,0,0;
    FastLED.show();
    delay(200);
    leds[i] = CRGB(0,0,0;
    FastLED.show();

  }
  delay(1000);
}

Weiviel Strom kann denn Deine externe Stromversorgung liefern? und welche Spannung hat es?
Und Wo hast Du die Plusleitng der LEDs angeschlossen?

Deltaflyer:
Weiviel Strom kann denn Deine externe Stromversorgung liefern? und welche Spannung hat es?
Und Wo hast Du die Plusleitng der LEDs angeschlossen?

Richtig wollte ich auch gerade nochmal fragen,

Versorgung über USB , und die LED Versorgung an einem Pin abnehme wird wohl nichts werden. Deshalb mal der Test mit immer nur einer LED

Heinz

@Heinz,
ja genau das hatte ich vermutet, dass Du versuchtest herauszubekommen, ob evt, die Spannungsversorgung einbricht.

LG Stefan

Deltaflyer:
@Heinz,
ja genau das hatte ich vermutet, dass Du versuchtest herauszubekommen, ob evt, die Spannungsversorgung einbricht.

LG Stefan

ich hbas halt nur falsch gemacht, hab im Moment nichts zum testen hier.

Ich hab ein Labornetzteil, an der Spannungsversorgung sollte es nicht liegen.

Es leuchtet jetzt immer eine LED mit dem Code

#include "FastLED.h"

#define ANZAHL_LEDS 40
#define LED_PIN 6
int i = 0;
CRGB leds[ANZAHL_LEDS];

void setup() {
  FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, ANZAHL_LEDS);
}

void loop() {
 

  for (int i = 0; i < ANZAHL_LEDS; i++) {
    leds[i] = CRGB(255,0,0);
    FastLED.show();
    delay(200);
    leds[i] = CRGB(0,0,0);
    FastLED.show();

  }
  delay(1000);
}

Jetzt weiß ich was der Fehler ist.

Bestellt hatte ich WS2812b, beim auspacken aber nicht darauf geschaut ob es auch diese sind.

Hab gerade mal die Verpackung rausgesucht und festgestellt das es RGBW5 sind.

Hab das mal mit dem Sketch gestestet:

// Modified strandtest sketch to support also RGBW strips like SK6812 based:
// http://www.szledcolor.com/download/SK6812RGBW.pdf
// Should be used with Adafruit NeoPixel version 1.0.3
// Hacked by G. Knauf 2015-12-06

#include <Adafruit_NeoPixel.h>
#include "Color_Definitions.h"
#ifdef __AVR__
#include <avr/power.h>
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#ifdef __AVR_ATtiny85__
#define NEO_PIN		0  // NeoPixel DATA
#undef  LED_BUILTIN
//#define LED_BUILTIN	0  // LED on Model B
#define LED_BUILTIN	1  // LED on Model A
#else
#define NEO_PIN		6  // NeoPixel DATA
#endif

// What type of NeoPixel strip is attached to the Arduino?
#define NEO_PTYPE	NEO_GRBW	// f.e. SK6812
//#define NEO_PTYPE	NEO_GRB		// most NeoPixel products

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS	60

#define BRIGHTNESS	64 // set max brightness

#define IWAIT		2000
#define SWAIT		20
#define LWAIT		50
#define HWAIT		1500

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_GRBW    Pixels are wired for GRBW bitstream (f.e. SK6812)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, NEO_PIN, NEO_PTYPE + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

// NOTE: RGBW LEDs draw up to 80mA with all colors + white at full brightness!
// That means that a 60-pixel strip can draw up to 60x 80 = 4800mA, so you
// should use a 5A power supply; for a 144-pixel strip its max 11520mA = 12A!

void setup() {
#ifdef __AVR_ATtiny85__
  // This is for Trinket 5V 16MHz
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  // End of trinket special code
#endif

#ifdef LED_BUILTIN
  // Turn the onboard LED off by making the voltage LOW
  pinMode(LED_BUILTIN, OUTPUT); 
  digitalWrite(LED_BUILTIN, LOW);
#endif

  strip.begin();
  strip.setBrightness(BRIGHTNESS); // set brightness
  strip.show(); // Initialize all pixels to 'off'

#ifdef IWAIT
  delay(IWAIT);
#endif
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(RED, SWAIT);
  colorWipeReverse(DARKRED, SWAIT);
  colorWipe(GREEN, SWAIT);
  colorWipeReverse(DARKGREEN, SWAIT);
  colorWipe(MAGENTA, SWAIT);
  colorWipeReverse(DARKMAGENTA, SWAIT);
  colorWipe(BLUE, SWAIT);
  colorWipeReverse(DARKBLUE, SWAIT);
  colorWipe(TURQUOISE, SWAIT);
  colorWipeReverse(DARKTURQUOISE, SWAIT);
#if (((NEO_PTYPE & 0xC0) >> 2) != (NEO_PTYPE & 0x30)) // check for RGBW type
  colorWipe(WHITE_LED, SWAIT); // use the real White LEDs
  colorWipeReverse(DIMWHITE_LED, SWAIT); // use the real White LEDs
#else
  colorWipe(WHITE, SWAIT); // use composed White from RGB
  colorWipeReverse(DIMGRAY, SWAIT); // use composed White from RGB
#endif
  delay(HWAIT);
  colorWipeReverse(BLACK, LWAIT);
  delay(HWAIT);

  // Send a theater pixel chase in...
#if (((NEO_PTYPE & 0xC0) >> 2) != (NEO_PTYPE & 0x30)) // check for RGBW type
  theaterChase(WHITE_LED, LWAIT); // use the real White LEDs
#else
  theaterChase(WHITE, LWAIT); // use composed White from RGB
#endif
  // theaterChase(GRAY, LWAIT); // White
  theaterChase(MAROON, LWAIT); // Red
  theaterChase(NAVY, LWAIT); // Blue
  theaterChase(LIME, LWAIT); // Green
  theaterChase(PURPLE, LWAIT); // Purple

  rainbow(LWAIT);
  rainbowCycle(SWAIT);
  theaterChaseRainbow(LWAIT);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint16_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

// Fill the dots one after the other with a color backward
void colorWipeReverse(uint32_t c, uint16_t wait) {
  for(uint16_t i=strip.numPixels(); i>0; i--) {
    strip.setPixelColor(i-1, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint16_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint16_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint16_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint16_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        }
        strip.show();
       
        delay(wait);
       
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
        }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

Und der Funktioniert prima.

Sorry Leute, wenn man nicht genau hin sieht wird einem einfach was anderes geliefert als man bestellt hat.

Danke für euer Hilfe, den das hat mich auf die Idee gebracht da mal nachzuschauen.

Gruß Levi

Hallo,

ok danke für die Rückmeldung

Heinz

Hi

Schade - Das roch quasi nach RGB-W also 4 Farb-Bytes pro Pixel - so kann der Überschlag der Farben zustande kommen - Du sendest 3 Byte pro Pixel, die LEDs behalten aber für sich jeweils 4 Byte - erklärt auch, warum weniger LEDs leuchten, als Du eingestellt hast.

Ok, eigentlich doch ganz gut, daß Du Das selber gefunden hast - Das passiert Dir so schnell nicht mehr :slight_smile:

MfG