Go Down

Topic: Led Effekte (Read 26862 times) previous topic - next topic

sschultewolter

Nov 14, 2013, 12:37 pm Last Edit: Mar 13, 2014, 06:14 pm by sschultewolter Reason: 1
Ich bin dabei, mein Regal, welches mit den WS2812B ausgestattet ist, mit weiteren Effekten auszustatten.

Effekte:

  • Lauflicht ersetzt durch KnightRider/LarsonScanner

  • Regenbogen Farbverlauf Links

  • Regenbogen Farbverlauf Rechts

  • Regenbogen Implosion

  • Regenbogen Explosion

  • Heartbeat (in Arbeit)

  • Fading aller Leds(noch nicht wieder eingebaut)

  • Fading einer Led(noch nicht wieder eingebaut)



Weitere Vorschläge sind erwünscht!

Alle Effekte sind unabhängig von der eingesetzten LED Anzahl. Einziges Manko, der KnightRider/Larson Scanner erstreckt sich mit der Beleuchtung über 5 Leds. (Benötigt > 5 Leds)

Aufbau der Leds:

Sketch mit 10 und 9 Leds getestet.
Code: [Select]
--x----x----x----x----x----x----x----x--


Code: [Select]
#include <FastSPI_LED2.h>
#define NUM_LEDS 9    // Anzahl an Leds am WS2812 Strip
#define RGBORDER GRB  // RGB Anordnung vom WS2812 Strip
#define DATA_PIN 6    // DATA Pin Arduino
CRGB leds[NUM_LEDS];


void setup() {
Serial.begin(9600);
FastLED.addLeds<WS2812B, DATA_PIN, RGBORDER>(leds, NUM_LEDS);
}

void loop() {
// Testfunktion, uebergibt LarsonScanner einen wechselnden Farbton
byte hue = (millis()/100)%255;

//larsonScanner(NUM_LEDS, hue, sat, duration);
//gradientRight(NUM_LEDS, NUM_LEDS, sat, duration);
//gradientLeft(NUM_LEDS, NUM_LEDS, sat, duration);
// implosion(NUM_LEDS, NUM_LEDS, sat, duration);
}


KnightRider/ Larson Scanner (Basis von jurs)
Code: [Select]

void larsonScanner(byte ledcount, byte hue, byte sat, byte duration) {
static unsigned long previousMillis = millis();
static int i; // Schrittzaehler
static int led = 0;
static boolean reverse = false;
byte dim;

if(i > 32) {
i = 0;

if (reverse) led--;
else led++;

// Anfang erreicht
if (led < 0) {
led = 0;
reverse =! reverse;
}

// Ende erreicht
if (led >= ledcount) {
led = ledcount-1;
reverse =! reverse;
}
}

if (millis()-previousMillis > duration) {
previousMillis = millis();
memset(leds, 0, ledcount*3); // LED Array zuruecksetzen
dim = i*4;
i++;

// Aktuelle Led-2
if (led-2>=0 && !reverse) {
leds[led-2] = CHSV(hue, sat, 128-dim); // FadeDown
}
else if (led-2>=0 && reverse) {
leds[led-2] = CHSV(hue, sat, dim); // FadeUp
}

// Aktuelle Led-1
if (led-1>=0 && !reverse) {
leds[led-1] = CHSV(hue, sat, 255-dim); // FadeDown
}
else if (led-1>=0 && reverse) {
leds[led-1] = CHSV(hue, sat, 127+dim); // FadeUp
}

// Aktuelle Led
leds[led] = CHSV(hue, sat, 255);

// Aktuelle Led+1
if (led+1<ledcount && !reverse) {
leds[led+1] = CHSV(hue, sat, 127+dim); // FadeUp
}
else if (led+1<ledcount && reverse) {
leds[led+1] = CHSV(hue, sat, 255-dim); // FadeDown
}

// Aktuelle Led+2
if (led+2<ledcount && !reverse) {
leds[led+2] = CHSV(hue, sat, dim); // FadeUp
}
else if (led+2<ledcount && reverse) {
leds[led+2] = CHSV(hue, sat, 128-dim); // FadeDown
}

FastLED.show();
}
}


Regenbogeneffekte
Code: [Select]

void gradientRight(byte ledcount, byte rainbowWidth, byte sat, unsigned int duration) {
memset(leds, 0, ledcount*3);
byte hue[NUM_LEDS];

// Farbverschiebung
byte colorshift = (255*millis()/duration)%255;
for(int i = 0; i < ledcount; i++) {
hue[i] = (i*255/rainbowWidth+colorshift)%255;
}

// Farbton nach rechts verschieben (1 2 3 4 5, -> 5 1 2 3 4)
for(int led = 0; led < ledcount; led++) {
leds[ledcount-(led+1)] = CHSV(hue[led], sat, 200);
}

FastLED.show();
}

void gradientLeft(byte ledcount, byte rainbowWidth, byte sat, unsigned int duration) {
memset(leds, 0, ledcount*3);
byte hue[NUM_LEDS];

// Farbverschiebung
byte colorshift = (255*millis()/duration)%255;
for(int i = 0; i < ledcount; i++) {
hue[i] = (i*255/rainbowWidth+colorshift)%255;
}

// Farbton nach links verschieben (1 2 3 4 5 -> 2 3 4 5 1)
for(int led = 0; led < ledcount; led++)
{
leds[led] = CHSV(hue[led], sat, 255);
}

FastLED.show();
}

void explosion(byte ledcount,byte rainbowWidth,byte sat, unsigned int duration) {
memset(leds,0,ledcount*3);
byte hue[NUM_LEDS];

// Farbverschiebung
byte colorshift = (255*millis()/duration)%255;
for(int i = 0; i < ledcount; i++) {
hue[i] = (i*255/rainbowWidth+colorshift)%255;
}

// Farbton nach links verschieben (3 2 1 -> 4 3 2)
for(int led = 0; led < ledcount/2; led++) {
leds[led] = CHSV(hue[led], sat, 100);
}

// Gerade Anzahl Leds
// Farbton nach rechts verschieben (1 2 3 -> 4 3 2)
if(ledcount%2 == 0) {
for(int led = ledcount/2; led < ledcount; led++) {
leds[led] = CHSV(hue[ledcount-led], sat, 100);
}
}
// Ungerade Anzahl Leds
// Farbton nach rechts verschieben (1 2 3 -> 4 3 2)
else {
for(int led = (ledcount/2)+1; led < ledcount; led++) {
leds[led] = CHSV(hue[(ledcount-1)-led], sat, 100);
}
// Farbton nach links und rechts verschieben (2 1 2 -> 3 2 3)
leds[(ledcount/2)] = CHSV(hue[(ledcount/2)], sat, 100);
}

FastLED.show();
}

void implosion(byte ledcount,byte rainbowWidth,byte sat, unsigned int duration) {
memset(leds,0,ledcount*3);
byte hue[NUM_LEDS];

// Farbverschiebung
byte colorshift = (255*millis()/duration)%255;
for(int i = 0; i < ledcount; i++) {
hue[i] = (i*255/rainbowWidth+colorshift)%255;
}

// Farbton nach rechts verschieben (3 2 1 -> 2 3 4)
for(int led = 0; led < ledcount/2; led++) {
leds[led] = CHSV(hue[(ledcount/2)-led], sat, 100);
}

// Farbton nach links verschieben (3 2 1 -> 2 1 4)
for(int led = ledcount/2; led < ledcount; led++) {
leds[led] = CHSV(hue[led-(ledcount/2)], sat, 100);
}

FastLED.show();
}
.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Mardetuino

#1
Nov 14, 2013, 12:50 pm Last Edit: Nov 14, 2013, 12:53 pm by mde110 Reason: 1
Das Wechswelblitzen der amerikanischen Polizei?
Vielleicht auch, eine LED nach der anderen immer heller. Als ob die Flaschen nacheiander "voll" werden...
Der KnightRider könnte auch mit gedimmten LEDs nett aussehen. So, dass immer eine Farbe den KR Effekt durchläuft.
Machst du den KR mit Nachleuchten?

Ich sehe aber nur 8 Jacky Flaschen!

sschultewolter

#2
Nov 14, 2013, 12:55 pm Last Edit: Nov 14, 2013, 01:21 pm by sschultewolter Reason: 1
Das Bild ist nicht mehr aktuell mit dem aktuellen Aufbau, die haben sich vermehrt ;) Amerikanische Polizei hatte ich schonmal mit dem TLC5916 gemacht, könnte den Sketch entsprechend rauskramen.

Das mit den Flaschen nacheinander voll werden hört sich gut an, und ist sehr einfach zu erledigen, da ich bereits das Grundgerüst dafür in 2 anderen Funktionen verwende.

Und ja, Knightrighter mit nachleuchten und ohne delays.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Chris72622

Ich seh keine acht Jackyflaschen.Vielleicht bin ich aber auch einfach nur zu besoffen.  :smiley-eek-blue:

Gruß Chris
Suche PoE Modul für Ethernet Shield

Eisebaer

anderer thread.

was jetzt nicht zwingend heißt, daß Du nüchtern bist...

sschultewolter

Warum sieht er dann keine keine 16/18 :D
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Spexx

Die für fastspi_led (2?) Library gibt es doch ein Beispiel mit über 20 verschiedenen Effekten, ist da nix dabei? Irgendwo gibt's auch ein Video, falls du das noch nicht kennst.

sschultewolter

FastSPI nutzt ich, sind aber nicht wirklich tolle Effekte bei. ShiftPWM hatte besser, aber sowas hab ich alles bereits.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

malerlein

Hallo Stefan

Ich probiere gerade neue Farbverläufe aus, ich weis nur nicht wie das ist bei 9 LED`s ich probiere es gerade mit 36 Led`s da ich die ja als meine Dezimal Uhr hier verbaut habe. Was mir gut gefällt ist  12 LEd`s laufen im Regenmbogen Muster nach links  und 12 Laufen nach rechts, jeweils die am Anfang und am Ende des Strips und die 12 in der Mitte wechseln lediglich alle zusammen die komplette Farbpalette. Also auf meinen 36 verbauten Led`s sieht das super aus und ich könnte mir denken das es unter Flaschen im Regal auch ein schöner Effekt5 ist.

+--+--+--+--+--+--+--+--+
    <-          I               I     ->
l.G.Jürgen
l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

sschultewolter

#9
Nov 14, 2013, 05:52 pm Last Edit: Nov 14, 2013, 05:58 pm by sschultewolter Reason: 1
Kann mir gerade nicht vorstellen wie das mit den Farbverläufen genau bei dir aussehen soll

Code: [Select]
static byte tmpRainbowWidth;
byte led, hue, saturation, brightness, rainbowWidth, colorshift;
unsigned int duration;

// Werte aus Array zuweisen
saturation = 255;
brightness = brightnessArray[brightnessIndex];
rainbowWidth = miscArray[miscIndex];
duration = durationArray[durationIndex];

if(rainbowWidth != tmpRainbowWidth) {
// String leeren
strMisc2 = "";
if(rainbowWidth < 10) strMisc2 += " ";
strMisc2 += rainbowWidth;
strMisc2 += " Leds";
tmpRainbowWidth = rainbowWidth;
}

// Farbverschiebung
colorshift = (255 * millis() / duration) % 255;
// Leds setzen
for(led = 0; led < NUM_LEDS; led++)
{
hue = (led * 255 / (rainbowWidth) + colorshift) % 255;
leds[led] = CHSV(hue, saturation, brightness);
}



Ist bei dir sowas, nur dass du 1 Hälfte nutzt und dann die andere Richtung spiegelst?  Nicht wundern über einzelnen Sachen in der Funktion. Wurde etwas umfangreicher meine Bedienung über Tasten + Display :D

Wobei, der Effekt, den du schreibst, könnte mir gefallen. Kanns mir glaub doch vorstellen.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

malerlein

#10
Nov 14, 2013, 05:53 pm Last Edit: Nov 14, 2013, 06:17 pm by malerlein Reason: 1
Ich stelle Dir einmal den Sketsch ein:
Code: [Select]

#include <FastSPI_LED2.h>
#define NUM_LEDS 36
#define DATA_PIN A2
CRGB leds[NUM_LEDS];

#include <Streaming.h>  

void setup()
{
// Serielle Schnittstelle
Serial.begin(115200);
// Konfiguration WS2812
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
       for(int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB(0, 0, 0);
}


void loop()
{
// regenbogen(uint32_t warteZeit, uint8_t saettigung, uint8_t hellwert)
regenbogen(2000, 172, 72);
}

void regenbogen(uint32_t warteZeit, uint8_t saettigung, uint8_t hellwert)
// warteZeit = Dauer um den Farbkreis einmal zu durchlaufen
// saettigung = 0 - 255; 255 voll gesaettigte Farben
// hellwert = 0 - 255; 255 volle Helligkeit
{
uint32_t aktuelleZeit = millis();
uint8_t farbverschiebung = (180 * aktuelleZeit / warteZeit) % 255;

for(uint8_t led = 24; led < NUM_LEDS; led++)
{
uint8_t farbwert = (led * 255 / (NUM_LEDS + 2) - farbverschiebung ) % 255;
               leds[led] = CHSV(farbwert, saettigung, hellwert);
}
       for(uint8_t led = 13; led < NUM_LEDS-13; led++)
{
uint8_t farbwert = (led / (NUM_LEDS) * farbverschiebung );
               leds[led] = CHSV(farbwert+farbverschiebung, saettigung, hellwert);
}
       for(uint8_t led = 0; led < NUM_LEDS-24; led++)
       {
               uint8_t farbwert = (led * 255 / (NUM_LEDS + 2) + farbverschiebung ) % 255;
leds[led] = CHSV(farbwert, saettigung, hellwert);

}
       
FastLED.show();
}
[code]

l.G.Jürgen
[/code]
l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

sschultewolter

Hmmm, der Sketch kommt mir an manchen Stellen bekannt vor :D

Mach mal bitte in [*code]  Sketch [*/code]  (ohne *), ich kriege Augenkrebs ;)
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

malerlein

Ja bei mir laufen die ersten 12 LED von der mitte zum Rand aussen dann 12 Led die nur die Farben wechseln ohne zu laufen und die nächsten 12 Led wieder gespiegelt von der mitte nach Aussen, so das der Mittlere Teil immer eine gesammte Farbe wechselt und die Äusseren Teile als Regenbogen von innen nach Aussen laufen

l.G.Jürgen
l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

malerlein

#13
Nov 14, 2013, 06:07 pm Last Edit: Nov 14, 2013, 06:11 pm by malerlein Reason: 1
Den Sketch mußt Du ja kennen ist vom Regenbogen nur was mit rum experimentiert.

Code: [Select]

#include <FastSPI_LED2.h>
#define NUM_LEDS 36
#define DATA_PIN A2
CRGB leds[NUM_LEDS];
#include <Streaming.h>  
void setup()
{
// Serielle Schnittstelle
Serial.begin(115200);
// Konfiguration WS2812
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
       for(int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB(0, 0, 0);
}
void loop()
{
// regenbogen(uint32_t warteZeit, uint8_t saettigung, uint8_t hellwert)
regenbogen(2000, 172, 72);
}
void regenbogen(uint32_t warteZeit, uint8_t saettigung, uint8_t hellwert)
// warteZeit = Dauer um den Farbkreis einmal zu durchlaufen
// saettigung = 0 - 255; 255 voll gesaettigte Farben
// hellwert = 0 - 255; 255 volle Helligkeit
{
uint32_t aktuelleZeit = millis();
uint8_t farbverschiebung = (180 * aktuelleZeit / warteZeit) % 255;
for(uint8_t led = 24; led < NUM_LEDS; led++)
{
uint8_t farbwert = (led * 255 / (NUM_LEDS + 2) - farbverschiebung ) % 255;
               leds[led] = CHSV(farbwert, saettigung, hellwert);
}
       for(uint8_t led = 13; led < NUM_LEDS-13; led++)
{
uint8_t farbwert = (led / (NUM_LEDS) * farbverschiebung );
               leds[led] = CHSV(farbwert+farbverschiebung, saettigung, hellwert);
}
       for(uint8_t led = 0; led < NUM_LEDS-24; led++)
       {
               uint8_t farbwert = (led * 255 / (NUM_LEDS + 2) + farbverschiebung ) % 255;
leds[led] = CHSV(farbwert, saettigung, hellwert);
}
FastLED.show();
}
[code]
[/code]
l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

sschultewolter

Setzt das bitte in Code Block  :smiley-fat:
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Go Up