Esp 32 For Schleife soll größere Zahl addieren

Hallo zusammen,

ich möchte einen WS2812 LED Streifen Programmieren und zwar so das in den ersten Sekunden erst jede zweite LED leuchtet, dann in zweier Gruppen, dann in 4er Gruppen (4 an, 4 aus,4 an 4aus...), dann in 8er Gruppen, dann 16, dann 32 und dann 64 LEDs gleichzeitig leuchten. Jeweils immer für paar Sekunden bis dann die Nächste Gruppe kommt.
Quasi ein binären Zahlencode:
Die nullte LED leuchtet zu keiner Zeit 00000000
Die erste LED leuchtet nur in der ersten Sequenz 10000000
Die zweite LED Leuchtet in der 2. Sequenz 01000000
Die Dritte LED leuchtet 11000000
vierte 00100000
fünfte10100000
...
So nun zu meinem Problem.
Und zu meiner Verteidigung ich bin kein Informatiker und das hier ist mein erstes Arduino Projekt.
Wie man dies Programmiert.
Falls jemand eine bessere Idee hat gerne her damit!
Mein bisheriger Code war:

for(int i=0; i<NUM_LEDS; i= i+4) {
    fill_solid(leds+i-2, 2, CRGB::Blue);
  }
FastLED.show();
delay(Time);

dies Funktioniert auch bis zur Schleife i=i+16
Allerdings danach nicht mehr.

for(int i=0; i<NUM_LEDS; i= i+32) {
    fill_solid(leds+i-16, 16, CRGB::Blue);
  }
FastLED.show();
delay(Time);

Bei i+32 bricht der ESP32 ab und startet dann wieder mit jeder zweiten neu.
Das aufspielen Funktioniert allerdings ohne Probleme.

Wenn ich mich recht entsinne hab ich ein wenig herumprobiert und es bis i=i+25 hingekriegt

Hättet ihr eine Idee woran das liegen kann?
Wie man das umgehen kann
bzw. gibt es eine bessere Idee das zu programieren?

Grüße

Ich nicht,,,,
Denn ich habe keine Ahnung was NUM_LEDS für einen Wert hat.

fill_solid() ist auch geheim

Dann könntest du den Exception Decoder verwenden um eine Klartextmeldung zu bekommen.

Vermutlich.

Eine Frage tut sich allerdings auf.....
Warum ist i ein int?
Denn: Kann es eine negative LED geben?

NUM_LEDS gibt an wie viel LEDs im Streifen sind.

#define NUM_LEDS 180

fill_Solid ist ein Befehl welcher ein Block von LEDs ansteuern soll
und nein es kann keine Negative LED geben. Was währe denn besser als integer?

Hmm. Am Anfang der Schleifen speist Du aber -2 bzw. -16 in den ersten Parameter falls leds Null ist.

fill_solid(leds+i-2

Ob das so gewollt ist...

zeig mal, es ist sicher eine Funkktion

Im Moment nichts, da i negativ wird, wie @wno158 schon anmerkte und nicht bekannt ist, was in fill_Solid steht.

Und dann mal als Gedankengang:

Wenn Du bei i == 176 (16*11) bist, wird i als nächstes 192....

So richtig habe ich nicht verstanden, was Du Dir vorstellst, aber möglicherweise kannst Du auf dem Folgenden aufbauen:

#include "FastLED.h"

const uint16_t NUM_PIXEL = 180;
CRGB leds[NUM_PIXEL];

#define LED_TYPE   WS2812
#define COLOR_ORDER   GRB
#define DATA_PIN       23

void setup()
{
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_PIXEL);
  FastLED.setBrightness(50);
  FastLED.show();
}

void loop() {
  uint32_t jetzt = millis();
  static uint32_t vorhin = 0;
  const uint32_t INTERVALL = 1000;
  static uint16_t pix = 0;
  static uint16_t g = 1;
  if (jetzt - vorhin >= INTERVALL) {
    vorhin = jetzt;
    pix = 0;
    do {
      for (uint16_t h = 0; h < g; h++) {
        if (pix >= NUM_PIXEL) break;
        leds[pix] = CRGB::White;
        pix++;
      }
      for (uint16_t h = 0; h < g; h++) {
        if (pix >= NUM_PIXEL) break;
        leds[pix] = CRGB::Black;
        pix++;
      }
    } while (pix < NUM_PIXEL);
    g *= 2;
    if (g > 64) {
      fill_solid(leds, NUM_PIXEL, CRGB::Blue);
      g = 1;
    }
    FastLED.show();
  }
}

Jau....
Vermutlich hast du gute Gründe die Funktion geheim zu halten.
(Mittlerweile gefunden)

Aber bei dir Pointer, welche VOR das Array zeigen.
Mit dem "negativ" wollte ich dich eigentlich mit der Nase darauf stoßen.
Hat nicht geklappt.

Wieso besser als integer?
Natürlich sind Integer Zahlen angemessen.
Nur eben nicht int.
Tipp:
Der/das Counterpart von signed, ist unsigned.

Vorschlag:
constexpr size_t numLeds {180};

Tut er nicht, denn diese Funktion ist Teil der Bibliothek.

OK, Danke!
Dann behaupte ich ab jetzt das Gegenteil.

KA, ob ich das Problem verstanden habe.....

#include <FastLED.h>

constexpr size_t numLeds {180};

#define DATA_PIN 2
#define CLOCK_PIN 13

// Define the array of leds
CRGB leds[numLeds];

void fillWechselweise(CRGB *leds, unsigned anz, unsigned blockLen, const CRGB farbeGerade, const CRGB farbeUnGerade)
{
  Serial.println();
  for(unsigned i = 0; i < anz; i++)
  {
    bool signifikantBit = (i / blockLen) & 1;
    leds[i] = signifikantBit ? farbeUnGerade : farbeGerade;
    Serial.print(signifikantBit);
  }
}

void setup()
{
  Serial.begin(9600);
  FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, numLeds);
  for(unsigned i = 1; i < 32; i++) // Blocklaenge
  {
    fillWechselweise(leds, numLeds, i, CRGB::Blue, CRGB::Black);
    FastLED.show();
  //  delay(1000);
  }
}

void loop()
{
}

Ausgabe:

010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011
000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111000111
000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000
000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111
000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111
000000011111110000000111111100000001111111000000011111110000000111111100000001111111000000011111110000000111111100000001111111000000011111110000000111111100000001111111000000011111
000000001111111100000000111111110000000011111111000000001111111100000000111111110000000011111111000000001111111100000000111111110000000011111111000000001111111100000000111111110000
000000000111111111000000000111111111000000000111111111000000000111111111000000000111111111000000000111111111000000000111111111000000000111111111000000000111111111000000000111111111
000000000011111111110000000000111111111100000000001111111111000000000011111111110000000000111111111100000000001111111111000000000011111111110000000000111111111100000000001111111111
000000000001111111111100000000000111111111110000000000011111111111000000000001111111111100000000000111111111110000000000011111111111000000000001111111111100000000000111111111110000
000000000000111111111111000000000000111111111111000000000000111111111111000000000000111111111111000000000000111111111111000000000000111111111111000000000000111111111111000000000000
000000000000011111111111110000000000000111111111111100000000000001111111111111000000000000011111111111110000000000000111111111111100000000000001111111111111000000000000011111111111
000000000000001111111111111100000000000000111111111111110000000000000011111111111111000000000000001111111111111100000000000000111111111111110000000000000011111111111111000000000000
000000000000000111111111111111000000000000000111111111111111000000000000000111111111111111000000000000000111111111111111000000000000000111111111111111000000000000000111111111111111
000000000000000011111111111111110000000000000000111111111111111100000000000000001111111111111111000000000000000011111111111111110000000000000000111111111111111100000000000000001111
000000000000000001111111111111111100000000000000000111111111111111110000000000000000011111111111111111000000000000000001111111111111111100000000000000000111111111111111110000000000
000000000000000000111111111111111111000000000000000000111111111111111111000000000000000000111111111111111111000000000000000000111111111111111111000000000000000000111111111111111111
000000000000000000011111111111111111110000000000000000000111111111111111111100000000000000000001111111111111111111000000000000000000011111111111111111110000000000000000000111111111
000000000000000000001111111111111111111100000000000000000000111111111111111111110000000000000000000011111111111111111111000000000000000000001111111111111111111100000000000000000000
000000000000000000000111111111111111111111000000000000000000000111111111111111111111000000000000000000000111111111111111111111000000000000000000000111111111111111111111000000000000
000000000000000000000011111111111111111111110000000000000000000000111111111111111111111100000000000000000000001111111111111111111111000000000000000000000011111111111111111111110000
000000000000000000000001111111111111111111111100000000000000000000000111111111111111111111110000000000000000000000011111111111111111111111000000000000000000000001111111111111111111
000000000000000000000000111111111111111111111111000000000000000000000000111111111111111111111111000000000000000000000000111111111111111111111111000000000000000000000000111111111111
000000000000000000000000011111111111111111111111110000000000000000000000000111111111111111111111111100000000000000000000000001111111111111111111111111000000000000000000000000011111
000000000000000000000000001111111111111111111111111100000000000000000000000000111111111111111111111111110000000000000000000000000011111111111111111111111111000000000000000000000000
000000000000000000000000000111111111111111111111111111000000000000000000000000000111111111111111111111111111000000000000000000000000000111111111111111111111111111000000000000000000
000000000000000000000000000011111111111111111111111111110000000000000000000000000000111111111111111111111111111100000000000000000000000000001111111111111111111111111111000000000000
000000000000000000000000000001111111111111111111111111111100000000000000000000000000000111111111111111111111111111110000000000000000000000000000011111111111111111111111111111000000
000000000000000000000000000000111111111111111111111111111111000000000000000000000000000000111111111111111111111111111111000000000000000000000000000000111111111111111111111111111111
000000000000000000000000000000011111111111111111111111111111110000000000000000000000000000000111111111111111111111111111111100000000000000000000000000000001111111111111111111111111

Was soll das bedeuten?

Denn dieses:

Widerspricht dem

void setup()
{
  Serial.begin(9600);
  FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, numLeds);
//  for(unsigned i = 1; i < 32; i++) // Blocklaenge
  for(unsigned i = 1; i < numLeds; i<<=1) // Blocklaenge
  {
    fillWechselweise(leds, numLeds, i, CRGB::Blue, CRGB::Black);
    FastLED.show();
  //  delay(1000);
  }
}

Ausgabe:

010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011
000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000111100001111000011110000
000000001111111100000000111111110000000011111111000000001111111100000000111111110000000011111111000000001111111100000000111111110000000011111111000000001111111100000000111111110000
000000000000000011111111111111110000000000000000111111111111111100000000000000001111111111111111000000000000000011111111111111110000000000000000111111111111111100000000000000001111
000000000000000000000000000000001111111111111111111111111111111100000000000000000000000000000000111111111111111111111111111111110000000000000000000000000000000011111111111111111111
000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.