Projekt mit Plan ohne Kenntnis bitte um Hilfe ! ! ! Vielen Dank

Hallo an alle, ich verwende derzeit erstmalig die WS1812B RGBW Stripes auch SK6812 genannt.

Nun, nachdem die Bibliotheken von FastLED erst Mal noch keinen Support für das Ambylight hergeben und der Stripe auf meinem Monitor angebracht ist, möchte ich bis zur Verfügbarkeit einen eigenen Sketch erstellen, welche mir folgendes Bild bringen soll.

Verwendet wird der Arduino Nano und oben genannte Neopixel mit einer Bestückung von 180 Stck gesamt.

Gewünscht ist folgender Effekt:

es soll vom Anfang und vom Ende des Stripes ein Lauflicht von etwa 7-15 Leds bis zur Mitte synchron laufen. zunächst ist erst Mal ein Wasserfalleffekt geplant, also die LEDs laufen von den äusseren Punkten des Stripes zur Mitte und starten dann erneut aussen. Gewünscht ist eine Abstufung der Helligkeit der Äuseren 3 Pixel auf beiden Seiten der 7-15 LEDS. Beim aufeinandertreffen der Pixel ist dann die Helligkeit bis alle Lichter ineinader gelaufen sind und mit den abgestuften äußeren erlöschen in der selben Helligkeit (Symetrisch eben).

Als Optio hätte ich gerne, dass evtl. mehrere Lauflichter in einer Phase erscheinen, quasi nach dem passieren der 20sten bzw. in der anderen Richtung der 160sten, soll dann bei = und 180 der neue Pixelstrang starten.

So nun noch eines obendrauf, wobei das Programmiertechnisch wohl schon früher dran kommt.

Alle Pixel, die in der zwischenzeit nun nicht an wären, sollen in einem langsamen Takt pulsieren, jedoch die Lauflicht LEDs von der Helligkeit nicht überblenden, jedoch auch nie ganz aus gehen. Gehen wir mal von einem Wert der Lauflichter von 100 aus, so sollte der Puls zwischen 20 und 75 liegen. Die Farbe ist das einfachste, es soll ein schönes Blau sein als Beispiel kann man sich den Warpkern aus dem Raumschiff Enterprise anlehnen. Wobei das ja dann nur noch simple spielereien sind...

Was den Code angeht ... ich habe sogut wie gar nichts ... ich würde als Ausgangsposition mit dem Strandtes RGBW von Adafruit arbeiten, da die Libary die Stripes wunderbar unterstützt ... lediglich was das Programmieren angeht bin ich echt am Arsch ... ich habe schon viel im Netz gesucht aber so eine richtige übersicht an Befehlen konnte ich nicht finden um mein Projekt um zu setzen und wenn nur auf Englisch, was grundsätzlich kein Problem ist, jedoch an manchen Punkten für das Sachverständnis doch recht schwierig ist ... Interpretationsfreiheit eben =)

Nun gut dann hoffe ich mal, dass Ihr mir weiter helfen könnt und wollt ... Vielen Dank schon mal dafür !!

Hier besagter RGBW Strandtestsketch :

[*code]

// NeoPixel test program showing use of the WHITE channel for RGBW
// pixels only (won't look correct on regular RGB NeoPixel strips).

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:
#define LED_PIN     6

// How many NeoPixels are attached to the Arduino?
#define LED_COUNT  60

// NeoPixel brightness, 0 (min) to 255 (max)
#define BRIGHTNESS 50

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.

strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show();            // Turn OFF all pixels ASAP
strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
}

void loop() {
// Fill along the length of the strip in various colors...
colorWipe(strip.Color(255,   0,   0)     , 50); // Red
colorWipe(strip.Color(  0, 255,   0)     , 50); // Green
colorWipe(strip.Color(  0,   0, 255)     , 50); // Blue
colorWipe(strip.Color(  0,   0,   0, 255), 50); // True white (not RGB white)

whiteOverRainbow(75, 5);

pulseWhite(5);

Leider nur ein Teil da keine Zeichen mehr =(

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Und wie stellst du dir eine Hilfe durch uns vor ?

Hi

Da die LEDs ALLE einzeln Ihre Farbe gesagt bekommen, liegt's an Dir, den passenden LEDs die gleiche Farbe zu nennen, wenn eben links/rechts die 'Gleiche' LED leuchten soll.

Was für Effekte Du baust ist auch nur durch Deine Phantasie begrenzt.

Wenn der Kram von Außen noch beeinflussbar werden soll - was bei WS2812 eh schwierig ist - solltest Du Dir aber trotzdem abgewöhnen, mit blockierenden Funktionen die Lichteffekte herzuzaubern.

Frage: Warum werden die 'normalen' RGB-Werte nicht auch als RGBW übergeben, nur eben mit W=0?
Was passiert, wenn einer der Pixel eine andere W-Helligkeit als Null hatte, wird Diese auf Null überschrieben?

Das frage ich Dich!! Da mir selber die Antwort nicht bekannt ist (und außerdem keine RGB-W Stripes habe).

MfG

Danke schon mal für die ersten Antworten :

Zunächst einmal habe ich zwar geringe selbstangeeignete Kenntnisse, die es mir erlauben in bestehenden codes anzupassen, was allerdings keine große Leistung darstellen dürfte ...

Die Problematik bei den RGBW Stripes zu den RGB Stripes sind meines Erachtens, dass die Farben nicht richtig dargestellt werden...

Da meine Kenntnis über die Befehle doch recht gering ist, war es mir bisher nicht möglich gewünschte Effekte selbst zu generieren ... Ich hatte sehr gehofft, dass in diesem Forum einfach Cracks sind, die so nen code eben Mal in 5 Min hinklatschen, weil sie genau verstehen was sie tun ... eben anders als ich ...

Für mich funktioniert das hier alles mit learning bei doing ... nur, da ich schon an den Begrifflichkeiten für gewünschte Effekte scheiter, fällt es erkennbar schwer, sich die einzelen Codebestandteile selbst zu suchen ... denn wonach suchen, wenn man nicht weis wie es fachlich korrekt bezeichnet wird ...

Ich bin meiner Meinung nach doch recht schnell lernfähig ... vorausgesetzt, ich finde dafür entsprechende Vorlagen oder jemand, der sein Wissen gerne teilt...

Gerade im moment versuche ich aus dem Strandtest und dem bekannten Knigtrider scanner gewünschten Code zusammen zu friemeln ... ich lerne die Bedeutung des Codes ausschließlich durch umschreiben und feststellen, welche Effekte das dann hinterher hat ... das ist sehr mühsam und sicherlich auch nicht sehr Zielführend ... Hat jemand evtl. eine deutsche Liste der Befehle samt Definition der Werteanpassung, so dass ich quasi weis was wofür steht und mir dann alles selbst erarbeiten kann ? Oder hat jemand lust mir einfach ein Script fertig zu machen ...

Auch ein Wegweiser über die Chronologische Zusammenstellung der Codebestandteile wäre sehr hilfreich ... einfach um verstehen zu können was wohin kommt und weshalb ...

Es ist jetzt nicht ganz unschlüssig das ein scrip begonnen und beendet werden muss ... bei komplexeren Sketches z.b. dem Strandtest kann ich nicht einfach Komponenten löschen ohne einen Fehler zu erhalten ... es zieht einen Rattenschwanz hinter sich her, da alles iwie zusammenhängt und aufeinander zugreift ... in meinem Verständnis sollte das aber auch anders gehen ...

Wie auch immer viel Geschreibsle wenig Inhalt ... ich hätte gerne oben beschriebene Effekte, die Einleitung des Strandtests habe ich nur gepostet um eben ggf. untschiede zum RGB aufzuzeigen ... wie gesagt ich bin auch neu in der Materie ...

Besten Dank

Hallo DerDude,

normal mische ich mich bei sowas nicht ein, aber hier muss ich.

Von vorn herein, das ist ein Forum, keine Auftragswerkstatt.
Hier kann man Lösungswege oder Beispiele für kleine Codeprobleme erhalten, auch Erklärungen oder Tipps.
Aber keinen komplett geschriebenen, komplexen Quellcode für ein personalisiertes Projekt.
Wenns wenigstens was allgemeines wäre.

Einen Code wie von dir beschrieben bringt nicht der erfahrenste Programmierer in 5 min hin.
Bei solchen Riesen Effekten ist das auch unmöglich. Das sind Neopixel. Du redest eher von Codestrukturen, die würde man eher in kurzer Zeit basteln können. Aber keinen Effekt der dann alles genauso macht wie gewünscht.

Da heisst es Stück für Stück programmieren, testen wie es aussieht, Fehler ausbessern, ändern.
Und dass solange, bis der gewünschte Effekt erreicht ist.

Ich arbeite viel mit Neopixel, daher weiß ich wovon ich rede.
Aber hier mal schnell reinhauen was gewünscht ist und erhoffen irgendjemand schreibt dir diesen Code finde ich fast schon unverschämt.
Du hast ja nicht mal eine richtige frage zu irgendwas. Die einzige Frage war, wie du den gesamten Code programmierst. Antwort: Anfangen und probieren. Wenn was nicht verstanden -> hier Fragen
Ich helfe gerne, bei Verständnisproblemen die beim Programmieren auftreten, oder fragen zu "wie mache ich am besten... ?".

Hier mal kleine Einleitung für NeoPixel.h

Du bauchst nur die folgenden Befehle der Lib, der Rest kann mit Grundfunktionen von C++ erreicht werden. Damit kannst du alles bauen. Auch deine Vorstellung von dem Effekt.

Hier die Grundbefehle, mit denen du alles relevante machen kannst. In Verbindung mit der passenden Logik von C++ versteht sich.

#include <Adafruit_NeoPixel.h>
#define Anzahl_Pixel 12
#define LedPin 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(Anzahl_Pixel, LedPin, NEO_GRBW + NEO_KHZ800); // hier die gewünschten werte eintragen

strip.begin(); // im Setup initialisieren 
strip.setBrightness(0-255); // regelt Helligkeit der Pixel
strip.show(); // Bringt Pixel zum leuchten ( muss immer nach setPixelColor stehen ) 
strip.setPixelColor(Leds, R, G, B, W); // Erstellt für den jeweiligen Pixel die eingegebenen Farben
strip.clear(); // Macht den Led Strip "leer" -- dahinter muss wie überall ein .show stehen

MFG

Franz

Hi

Kleiner Einwand!!

strip.show(); // Bringt Pixel zum leuchten ( muss immer nach setPixelColor stehen )

KANN ich SO nicht stehen lassen!!
Dieser Befehl (... diese Methode ...) schickt die in einem Array enthaltenen Farbwerte für ALLE LEDs DIESES Stripe an die LEDs.
Das dauert seine Zeit, das Timing ist bekannt und die benötigte Zeit lässt sich ausrechnen.

Viel eher wird diese Methode aufgerufen, wenn alle LEDs Ihre NEUE Farbe erhalten haben (also alle Änderungen des Stripe für das 'nächste Bild' abgearbeitet sind.
DANN ERST werden die Daten an den Stripe gesendet.

Dein Fernseher 'malt' auch nicht immer das komplette Bild, wenn er links oben mit dem ersten Pixel anfängt, dann das komplette Bild, beim 2.ten Pixel, ...

Obwohl Das schon recht fix geht - also die Daten raus hauen - brauchst Du dennoch ein Vielfaches an Zeit, bis Du alle Pixel 'bemalt' hast.

Die ganzen anderen Methoden ändern NUR die Werte im Speicher des Arduino (in dem extra für den Stripe zur Laufzeit angelegtem Array) - dabei zuckt nicht eine LED!!

Hoffe, Das war verständlich.

MfG