ich habe ein kleines Problem mit meinem Lauflicht. Immer wenn die Led zur nächsten Led übergehen soll, gibt diese einen Peek noch von sich.
Dachte erst, dass es vielleicht vom Chip selber kommen kann. Wie ich aber dann, nachdem ich die Serielle Ausgabe eingestellt habe, gesehen hab, macht die Led was sie soll. Das Programm haut den Peek raus.
Gibt es irgendwelche Ungereimheiten, die zu diesem Problem führen können?
// Lauflicht
void runningLed()
{
// Einmal ausführen
if(runOnce == true)
{
// Farbton, Sättigung, Helligkeit, Dauer
values[1] = 170;
values[2] = 255;
values[3] = 255;
values[4] = 1000;
runOnce = false;
}
static boolean state;
static byte led;
static unsigned long previousMillis;
byte hue, saturation, brightness, value;
unsigned int duration, modDuration, fadeValue;
// Werte aus Array zuweisen
hue = values[1];
saturation = values[2];
brightness = values[3];
duration = values[4];
// Vergangene Zeit seit letzter Änderung
if(millis() - previousMillis >= duration)
{
// Aufwärts zählen
if(led < NUM_LEDS - 1 && state == false)
{
led++;
if(led == NUM_LEDS - 1) state = true;
}
// Abwärts zählen
else if(led > 0 && state == true)
{
led--;
if(led == 0) state = false;
}
previousMillis = millis();
}
// Wertebereich von 0 bis duration (Dauer in ms)
modDuration = millis() % duration;
// Fade Down
if(modDuration > duration / 2) fadeValue = duration - modDuration;
// Fade Up
else fadeValue = modDuration;
// Mapping in Abhängigkeit von der maximalen Helligkeit
value = map(fadeValue, 0, duration / 2, 0, brightness);
// Debug
Serial << F("led:") << led << (";value:") << value << F(";previousMillis:") << previousMillis << endl;
// Led setzen
leds[led] = CHSV(hue, saturation, value);
}
Du als presenter Forums-User müßtest wissen, daß wir den GESAMTEN Sketch brauchen um Fehler zu finden und nicht nur einen Auszug.
In Deinem Sketchausschnitt verheimlichst Du uns viele Variablendeklarationen. Bitte den gesamten Sketch.
Nachdem erst scheinbar eine Lösung gefunden habe, kam diese bei anderen Wartezeiten doch wieder. Habe nun die Modulo Funktion komplett herausgenommen und mit der verstrichenen Zeit seit der letzten Aktualisierung gerechnet.