Rainbow Neopixel Funktion mit Millis bauen

Hallo Leute,

habe Probleme mit folgendem :
Wer kennt Sie nicht, die altbekannte Neopixel RainbowCycle Funktion.
Nun folgendes Problem.
Diese Funktion läuft ja mit Delay(time)
Würde das aber gerne auf Millis() umbauen.

Ich weiß nicht, wie es funktioniert for Schleifen mit Millis zu Kombinieren. Dass will nicht klappen. Normale Schrittketten gehen bei mir, sobald aber eine For Schleife dabei ist passiert nurnoch Mist…

Hier der Code

void RGBCycle(uint8_t pause, int bright){

  strip.setBrightness(bright);

    //unsigned long currentMillisRGBCycle = millis();

  //Serial.println(currentMillisRGBCycle);

  // if ((unsigned long)(currentMillisRGBCycle - previousMillisRGBCycle) >= pause) {
  uint16_t Pixel, j;

  for (j = 0; j < 256; j++) // 1 cycles of all colors on wheel
  {
    for (Pixel = 0; Pixel < strip.numPixels(); Pixel++)
    {
      strip.setPixelColor(Pixel, Wheel(((Pixel * 256 / strip.numPixels()) + j) & 255));
      if (bt.available() > 0) {return;}
    }
    strip.show();
    //   previousMillisRGBCycle = millis();

    delay(pause);
    if (bt.available() > 0) {return;}
  }
}

Die Wheel Funktion wäre hier

uint32_t Wheel(byte WheelPos)
{
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85)
  {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170)
  {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  if (bt.available() > 0) {
    return;
  }

}

Wenn jemand helfen will, wäre super nett :))
Wahrscheinlich recht einfach, Übung macht den Meister nicht ? :smiley:

Eventuell so:

void RGBCycle(uint32_t pause, int bright) {
  strip.setBrightness(bright);
  unsigned long currentMillisRGBCycle = millis();
  static unsigned long previousMillisRGBCycle = 0;
  static uint8_t j = 0;

  if (currentMillisRGBCycle - previousMillisRGBCycle >= pause) {
    for (uint16_t Pixel = 0; Pixel < strip.numPixels(); Pixel++)
    {
      strip.setPixelColor(Pixel, Wheel(((Pixel * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    previousMillisRGBCycle = millis();
    j++;
  }
}

Hey agmue,

wie immer, genau das was ich suche, klappt super :slight_smile: Vieeeeelen lieben dank

Wieder mal :smiley: