LED fade mit Sinus/Cosinus

Hallo zusammen,

ich versuche momentan eine LED von 0 auf 255 zu faden mit Hilfe der Sinusfunktion. Im Internet habe ich ein paar Beispiele gefunden und diese ausprobiert. Diese Sinuskurve läuft ja anhand der millis. Jetzt ist mein Problem, dass ich nur den Anstieg haben möchte. Also von 0 auf 255 und nicht wieder auf 0. Kann mir da jemand weiter helfen?

int value;
const int ledpin = 5;                           // light connected to digital pin 10
long time=0;
int led_val = 0;

int periode = 1000;

// the setup routine runs once when you press reset:
void setup() {

}

// the loop routine runs over and over again forever:
void loop() {

rgbShow();

analogWrite(ledpin, led_val);
}

void rgbShow()
{
time = millis();

value = 128+127*sin(2*PI/periode*time);
led_val = value;
}

Hallo,

du möchtest die LED Helligkeit nach der Sinuskurve steuern?
Also dem Kreisbogen. Und davon nur die positive Halbwelle?
Wozu dann mit millis? Der Wert läuft stetig hoch.
Ich würde es vielleicht mit dem Kreisbogen machen
Der wird mit Winkelwerten von 0 bis 360° gefüttert. Du nimmst nur 0 bis 90° bzw. 180°.

Ja da dies optisch schöner anzuscheun ist, wie wenn man sie linear steuert.
Millis verwende ich aus dem Grund, da ich später noch nebenher was steuern möchte und delay mir dann dies verhindert.
Aber an den Kreisbogen habe ich jetzt noch nicht gedacht. Muss ich gleich mal ausprobieren :slight_smile:

Hallo,

mal anders gefragt. Soll die Helligkeitsänderung für das Auge linearisiert werden?
Denn das geht noch anders. Mit Gammakorrektur.
Oder möchtest du irgendeinen Leuchtbogen mit LEDs darstellen?

Momentan bin ich dabei mir ein Wake UP light zu bauen, das die Uhrzeit vom Zeitserver holt und anhand dieser den Wochentag berechnet. Über das Handy soll später mal verschiedene Wecktage und Weckzeiten vorgegeben werden. Das alles funktioniert soweit. Bei mir hängt es nun daran, dass ich die RGB LED schön sanft faden möchte mit einstellbaren Zeiten.
Also im endefekt linearisiert fürs Auge. Wie funktioniert den die Gammakorrektur? Gibt es da schon was?

Hallo,

google mal nach "LED Fading". Da landest du unter anderem im Nachbarforum, da ist das beschrieben.
Kurzum, man legt sich die benötigten/vorberechneten Helligkeitswerte in einer Tabelle an. Später liest man die hintereinander aus.

Man könnte einfach FastLED benutzen.
Konkret sin8 oder beatsin8.
Und dann analoge Ausgabe, wie hier gezeigt.
Gammakorrektur mit FastLED: hier.

Gruß, Helmuth


Die Sinuskurve beginnt bei 0 Grad mit 0. Wie Du das programmierwn willst, muß der Winkel von -Pi/2 bis Pi/2 reichen um einen Wert von -1 bis 1 zu erhalten.

time = millis();
value = 128+127*sin(2*PI/1000*time);

So fängst Du irgendwo zufällig an da millis sicher nicht von 0 bis 1000 geht.

Grüße Uwe