Arduino Forum

International => Deutsch => Topic started by: Aceli on Mar 03, 2019, 09:38 pm

Title: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 03, 2019, 09:38 pm
Moin

Ich möchte ein lauflicht bauen, wo 4 led in der Höhe und ca 15 led in der Breite dieses bilden sollen .

Wo also 4 LEDs immer dann 15 mal in der Breite wandern .

Welcher Arduino würde das machen und wie würdet ihr das ganze anschließen ?
Also in Anbetracht , das der Arduino ja nicht alle versorgen kann mit Spannung . Oder ?

Habe eine Anleitung gefunden mit potentiometer wo ich die Geschwindigkeit einstellen kann. Was mir gut gefällt . Weil ich das schon recht langsam haben möcht .
Und dort sind zB 3 LEDs immer an im Lauf .
Das würde ja bedeuten das von meinen 60 LEDs maximal 12 leuchten und dann die nächsten . Also müsste er maximal 12 versorgen .

Habe ich einen denk Fehler ?

Oder doch lieber externe Stromquelle und dann die über zB mosfet/Transistor schalten ?



Vielen Dank
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Mar 03, 2019, 09:47 pm
Hi

Du schreibst wirr - Deiner Beschreibung nach würde Dir ein 16-Bit Schieberegister reichen, an Dessen Ausgänge kommen dann jeweils vier LEDs.
Denke, SO hast Du Das nicht gemeint.

Wenn's 8x32 LEDs werden dürfen, wäre mein Vorschlag eine DOT-Matrix mit 4 Stk 8x8DOT-Modulen, befeuert durch einen MAX7219 - gibt's beim fC für ~5€.
Hätte den Mehrwert, daß man Da auch Text mit scrollen könnte.
Wenn Du 2x2er-Pixel 'baust' hättest Du so eine Matrix von 4x16, was Deinen 4x15 schon recht nahe kommt - mit recht einfacher Ansteuerung.
Angesteuert durch einen Arduino Deiner Wahl.

Was hast Du wirklich vor?

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 03, 2019, 09:56 pm
Soll in einen Tresen eingebaut werden .
Vor dem Tresen sind Flaschen . Diese möchte ich beleuchten .
4 Flaschen in der Höhe und dann jeweils 15 nebeneinander. Da soll das lauflicht dann einzig finden .
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Mar 03, 2019, 10:06 pm
Hi

Dann wäre meine Wahl WS2812B oder Vergleichbare - also programmierbare LEDs.
Alle LEDs hängen an einem einzigen Datenpin, jede LED ist einzeln in RGB ansteuerbar - man muß Es ja nicht benutzen ... man kann aber ... zufällige Auswahl, was nun getrunken werden soll ... ;)
Wobei hier eine einzelne LED ggf. recht verloren aussehen könnte - soll die LED die Flasche beleuchten, oder 'nur' das Fach als Solches?

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 03, 2019, 10:08 pm
Die Flaschen sind Deko . Also die Flasche soll beleuchtet sein .
Denke das eine led die Flasche vom Boden nach oben ausreichend beleuchtet ?! . Müsste ich mal testen
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Rentner on Mar 03, 2019, 10:16 pm
Hallo

Nimm doch einen Led Strip .mit Controller . Externe Stromversorgung  dran und je nach Typ eine oder zwei Ausgange zur Ansteuerung.

Must du Mal sehen die gibt's z.B mit 30 Led / Meter.

Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 04, 2019, 09:51 am
Habe ich einen denk Fehler ?
Nein, mehrere.

Welcher Arduino würde das machen und wie würdet ihr das ganze anschließen ?
Also in Anbetracht , das der Arduino ja nicht alle versorgen kann mit Spannung . Oder ?
...
Oder doch lieber externe Stromquelle ...
Mit Spannung schon, aber nicht mit Strom, daher ist ein eigenes Netzteil notwendig. Letztlich wirst Du auch den Arduino damit versorgen wollen.

Welcher Arduino würde das machen
Die 60 LEDs per Programm zu steuern, dürfte für einen UNO kein Problem darstellen. Wieviel Pins Du brauchst, hängt dann vom gewählten LED-Typ ab.

Denke das eine led die Flasche vom Boden nach oben ausreichend beleuchtet ?! .
Kommt auf die LED an.

Soll die Animation einfach so vor sich hin laufen oder benötigt sie eine Bedienung?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 04, 2019, 10:45 am
Okay vielen Dank .

Also externe Versorgung .

Mh eine Bedienung ?!
An was dachtest du?

Evtl nur eine Auswahl zwischen Dauer leuchten und dem lauflicht ?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: nix_mehr_frei on Mar 04, 2019, 11:06 am
Probiere mal die WS2812 (gibts außer Stripe auch als kleine abbrechbare Einzelpixel-Platinen).
Wenn dir die nicht hell genug sind, dann gibt es auch das darin verbaute IC, den WS2811 mit getakteten KSQs und RGB Power LED auf Platinen.
https://de.aliexpress.com/item/3W-high-power-WS2811-controlled-led-pixel-module-DC12-24V-input-RGB-addressable-full-color/32798198341.html (https://de.aliexpress.com/item/3W-high-power-WS2811-controlled-led-pixel-module-DC12-24V-input-RGB-addressable-full-color/32798198341.html)
Softwaretechnisch ist beides 1:1 austauschbar. Nur bei der Stromversorgung mußt du dann gucken. Die WS2812 möchten 5V, wogegen die Power Platinen wohl auch mit mehr klar kommen, was dann auch anzuraten ist, wenn man keine zu fetten Leitungen für die Betriebsspannung will.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 04, 2019, 12:33 pm
Mh eine Bedienung ?!
An was dachtest du?

Evtl nur eine Auswahl zwischen Dauer leuchten und dem lauflicht ?
Der Phantasie sind da keine Grenzen gesetzt. Mehrere Animationsprogramme wären möglich, die Du wählen können möchtest. Sei versichert, Dir werden Ideen kommen, spätestens aber Deinen Gästen.

Meine LED-Uhr (https://forum.arduino.cc/index.php?topic=372623.msg3500125#msg3500125) zeigt normalerweise die Zeit an, kann aber auch Regenbogen oder eine andere Animation. Umschalten tue ich per IR-Fernbedienung.

Neopixel kannst Du probieren, technisch besser finde ich DotStar (APA102), die sich auch problemlos mit IR-Fernbedienungen vertragen.

Wenn Du ein Grafikdisplay verwenden möchtest, benötigst Du Fontdefinitionen, die Speicher brauchen, weshalb Du dann möglicherweise einen größeren µC (Mega2560, Teensy 3.x oder sowas) verwenden solltest.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 10:37 am
Kann man den solche nutzen oder sind die gar praktisch dafür?!


https://s.click.aliexpress.com/e/c1MiqJZm

Kann mir jemand in Sachen Stromversorgung weiter helfen ? Wie würde das Aussehen oder was würde ich benötigen ?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 05, 2019, 10:46 am
Kann man den solche nutzen oder sind die gar praktisch dafür?!
Ja, sieht gut aus. Sowas gibt es auch als 8 und 12 mm Durchmesser Gehäuse (Beispiel (https://www.aliexpress.com/item/50pc-string-DC5V-12mm-WS2801-2801-IC-Digital-Diffused-RGB-Full-Color-Addressable-LED-Pixel-String/32651358920.html)).

Rechne mit 60 mA je Lichtpunkt, 5V Gleichspannung ist eh klar. Damit versorgst Du dann auch Arduino, Display usw.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 01:53 pm
Das würde doch bedeuten , das ich ein Netzteil brauche , was allein für die LED ca 18 W und 3,6 A leistet.
Mit 5 V .

Wenn ich von 4 Reihen mit je 15 led rechne .

Dann noch Bisse was für den Arduino .

Lieg ich da richtig ?

Bzw habe ein kleines Netzteil gefunden . 5V 4 A 20 W .

Da is man doch auf der sicheren Seite oder
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 05, 2019, 02:00 pm
Lieg ich da richtig ?
Goldrichtig :)

Ich verwende beispielsweise ein Stecker-Schaltnetzteil (https://www.pollin.de/p/stecker-schaltnetzteil-quatpower-xy-0504000-e40-17-5-v-4-0-a-352252).
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 02:21 pm
Traumhaft. Danke

mal eine Dilettantische zeichnung eines Schaltplanes . Sorry.

Gehen die LED reihen einzeln an die Ausgänge vom Arduino?

und macht es ggf sinn auch hier die Enden der LEDs wieder mit dem Netzteil zu verbinden?
Habe das bei einem Ambilight Projekt mit zusatzeinspeisung gemacht weil die Leuchtkraft nachlässt und weiß nicht wirklich weiß ist.

Gruß und dank
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: uwefed on Mar 05, 2019, 05:10 pm
Traumhaft. Danke

mal eine Dilettantische zeichnung eines Schaltplanes . Sorry.
Kein Problem

Quote from: Aceli
Gehen die LED reihen einzeln an die Ausgänge vom Arduino?
Müßte beides möglich sein. Du kannst 4 Streifen mit 4 Pins mit 4 Instanzen der Klasse oder alle 4 Strips in serie mit 1 Pin. Bei 60 LED würde ich die 2.Möglichkeit bevorzugen.

Quote from: Aceli
und macht es ggf sinn auch hier die Enden der LEDs wieder mit dem Netzteil zu verbinden?
Habe das bei einem Ambilight Projekt mit zusatzeinspeisung gemacht weil die Leuchtkraft nachlässt und weiß nicht wirklich weiß ist.
bei 15 LED ist das nicht notwendig. Wenn Du einen Streifen zu 60 hättest, dann schon.

Grüße Uwe
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 05:40 pm
Cool. vielen dank.

dann werd ich wohl mal teile ordern und in der Zeit ( Ali dauert ja etwas ) mir einen Sketch suchen wo das evtl. schon mal angeschnitten ist.

mit in Serie meinst du 1 Pin und dann hintereinander weg!?

da muss ich dann wirklich mal googlen

Soll diesem dann nahe kommen. und halt recht langsam.
Knight Rider (https://www.youtube.com/watch?v=Z_MvWpcwWao)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: uwefed on Mar 05, 2019, 06:06 pm
mit in Serie meinst du 1 Pin und dann hintereinander weg!?
ja. Kannst ja mal das eine und das andere probieren. Zuerst den ganzen Streifen und dann die Stücke, Außeinanderschneiden mußt Du sie sowieso.

Grüße Uwe
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 06:11 pm
reicht den ein NANO?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: uwefed on Mar 05, 2019, 07:14 pm
reicht den ein NANO?
Ja.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 07:16 pm
wieso gibt es kein "Gefällt Mir" Button.

Danke
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: uwefed on Mar 05, 2019, 07:27 pm
Du kannst Karma an jene vergeben, bei denen Du Dich bedanken willst. Einfach auf [add] neben dem Karma des Users drücken.

Grüße Uwe
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 05, 2019, 07:42 pm
dann werd ich wohl mal teile ordern und in der Zeit ( Ali dauert ja etwas ) mir einen Sketch suchen wo das evtl. schon mal angeschnitten ist.
Schaue Dir mal die Beispiele von FasLED an.

reicht den ein NANO?
Für die Animation locker, bei Fontdefinitionen für ein OLED kann es knapp werden. Ein Mega 2560 PRO (https://de.aliexpress.com/item/Mega-2560-PRO-Embed-CH340G-ATmega2560-16AU-with-male-pinheaders-Compatible-for-Arduino-Mega-2560/32801785024.html) wäre eine Alternative.

Display 20x4 (https://de.aliexpress.com/item/1-PCS-LCD2004-I2C-2004-20x4-2004A-Blau-Gr-n-bildschirm-HD44780-Charakter-LCD-w-IIC/32836063834.html)

OLED Display (https://de.aliexpress.com/item/0-96-zoll-IIC-Serien-Wei-OLED-Display-Modul-128X64-I2C-SSD1306-12864-LCD-Screen-Bord/32896971385.html)

IR-Fernbedienung (https://de.aliexpress.com/item/HX1838-Infrared-Remote-Control-Module-IR-Receiver-Module-DIY-Kit-HX1838-for-arduino-Raspberry-Pi/32820009060.html)

Bitte beachte die Zollbestimmungen und Händler in EU freuen sich auch über Aufträge!

Viel Spaß beim Bestellen :)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 05, 2019, 08:12 pm
Ach Siehste . Auf dem Handy sieht man das mit dem Karma nicht ....

Ja ich bestelle sonst auch bei EU Händlern . Kommt immer drauf an ;)

Joa n oled muss ja nicht .

Aber dank .
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Mar 05, 2019, 09:09 pm
Hi

Der von Dir auf Ali verlinkte Stripe hat wohl zwei der LEDs zusammen hängend - deshalb sieht auch die Animation in dem Video etwas seltsam aus.
Diese Einzel-Platinchen kannst Du auch trennen und hast dann eine Kette von 50 (100) LED mit jeweils 10cm Abstand.
Mit der FastLED (habe ich bisher nur 1x angeschuppert) oder Was mit 'NeoPixel' in der Beschreibung (z.B. von AdaFruit) kannst Du Die dann betreiben.
Night-Rider sollte damit kein größeres Problem sein - vll. dazu ein passendes Auto zu finden :)

Du kannst JEDE LED einzeln in Farbe und Helligkeit einstellen ... wirst Du aber selber erleben.
Wenn die 10cm zwischen den Flaschen nicht ausreichen, können die 'Zwischen-LEDs' auch als Blind-LED benutzt werden (man lässt Diese dunkel und benutzt Sie nur dafür, daß das Signal weiter geht) - oder macht weitere 'Leuchtpunkte' zwischen den Flaschen - da sind Deiner Fantasie keine Grenzen gesetzt ... Die müssen auch Nichts direkt mit der Beleuchtung der Flaschen zu tun haben, sondern können auch 'Ihr eigenes Ding' abspielen.

Im Weihnachtsbaum hatte ich zwei 150er Streifen (also 10 Meter LED-Stripe mit dann 300 LEDs an einem Nano), wo 'hier und da Mal eine Sternschnuppe aufblitzte' - und sonst 'grüne Würmer' durch den Baum krochen.

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 06, 2019, 04:06 am
Moin,

Vielen Dank.

Ja ich überlege gerade ob ich die Variante, wo die Kabel bereits angelötet sind , kaufe oder ein Stripe und selber löte.

Benötige Grob 18 cm zwischen den LEDs.


und lauflicht sollte dann damit es besser aussieht!?
erste LED etwas dunkel
zwei LED hell
dritte wieder dunkler
und so sollte es dann laufen.....

Schönen start in den Mittwoch morgen
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 06, 2019, 11:33 am
und lauflicht sollte dann damit es besser aussieht!?
Die 15 LEDs sind für ein Lauflicht etwas wenig. Möglicherweise meinst Du das aber auch nicht, sondern möchtest die LEDs einer Flasche heller werden lassen, dann wieder dunkler und dann die nächste Flasche. Das wäre dann eher nacheinender faden, könnte ich mir ganz gut vorstellen, besonders über das Farbspektrum eines Regenbogens verteilt. FastLED unterstützt das Farbmodell HSV, da geht das relativ einfach.

Anregungen: Arduino - LEDStrip effects for NeoPixel and FastLED (https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 06, 2019, 07:27 pm
Vielen Dank
.
Das habe ich heute Nachmittag auch schon mal gefunden . Werde mir das mal genauer anschauen .

Joa wäre auch eine Option die so leuchten zu lassen .
Aber kein Regenbogen ;)

Aber dennoch evtl eine Option das wenn die eine ausgeht die andere langsam angeht .

Scheint ja alles möglich zu sein ;)

------

jez überlege ich natürlich schon, ob man nicht mehrere beispiele als nur Wave/faden und dauer an nutzt.

nur mit was am besten "umschalten"
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Mar 06, 2019, 08:41 pm
Hi

Das ist Alles nur durch Deine Fantasie begrenzt.
Selber würde ich die Variante mit Verkabelung nehmen - bei 18cm Abstand hast Du halt zwischen den Flaschen eine LED 'über' - Die kann ja das bereits genannte Sternenblitzen übernehmen.
Auch wirst Du wohl von einer zur anderen Reihe 'ein/zwei LEDs' frei liegend haben.
Wenn Du Diese irgendwie sinnvoll verbauen kannst, würde ich Das so lassen und diese Pixel eben zufällig aufblitzen lassen (oder so Zeug).
Sonst kannst Du auch die Kabel dort auftrennen und ein längeres Kabel dazwischen löten - hätte jetzt die vom Hersteller empfohlene Maximal-Entfernung aber nicht zur Hand!
Das 'Gruppieren', also welche LEDs Flaschen beleuchten (oder halt Welche genau) lässt sich nachher im Sketch in Arrays einarbeiten - denke aber, wenn Da Beratungsbedarf besteht, bist Du mit Deinem Problem hier immer wieder gerne gesehen.

Lass Mal sehen, wenn's so weit ist :)

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Mar 06, 2019, 08:50 pm
nur mit was am besten "umschalten"

Nr. 2 und 3 benötigen eine Rückmeldung  durch LED oder Display.

Ein Poti für die Geschwindigkeit oder zusammen mit Drehencoder.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 06, 2019, 08:53 pm
danke,

ja werde bestimmt noch etwas Beratung in anspruch nehmen ;) man lernt ja nie aus.

Bin selber gespannt wie es wird.

Natürlich wird das Projekt vorgestellt wenn fertig bzw in erprobung.


An einen Drehschalter hatte ich bereits auch gedacht. Das wäre mein Favorit.

n Poti wäre natürlich auch nochmal etwas. Welchen sollte man da nehmen? 3 Pin- welchen widerstand!?
Denke 3 oder 4 Effekte sollten dann auch reichen.

Aber erstmal eins nach dem anderen.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Tommy56 on Mar 06, 2019, 09:50 pm
Nimm nicht mehr als 10 kOhm, das passt am Besten zum Arduino-Analogeingang.

Wobei dann wohl ein LCD-Display (über I2C) sinnvoll wird und dann kannst Du auch gleich über ein Keypad oder einen Drehencoder nachdenken. Das läßt Dir nach oben mehr Möglichkeiten und die Begehrlichkeiten kommen mit den Erfolgen.

Gruß Tommy
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 06, 2019, 10:50 pm
Danke.

na ich möcht erstmal nicht zu viel.

ich freue mich schon wenn es funktioniert. Also schritt führ Schritt.

Erstmal die Teile ordern, bekommen und dann mal n normales lauflicht/Wave/faden üben.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Mar 07, 2019, 12:34 am
Netzteil, LED und Poti sind geordert.

Nun heisst es Warten.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 04, 2019, 08:49 am
so Netzteil, LEDs sind da.

allerdings nur 50 LEDS .... hab mich wohl verklickt....

Hab sie mal angeschlossen.... und wie fast befürchtet, ich glaube der Boden der flasche ist zu dick und d.h. die LED kommt nicht ganz durch :/
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: ElEspanol on Apr 04, 2019, 05:44 pm
Loch in den Flaschenboden bohren
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 16, 2019, 08:11 pm
moin

ja also ich werd wohl unten oder hinten dann Löcher bohren damit es besser Leuchtet.

Habe nun mal den einen oder anderen Sketch versucht.... aber so richtig was war noch nicht dabei.....

Versuche das jej erst einmal mit nur 15 LEDS.

aktuell läuft es mit diesem Sketch, ich weiß aber noch nicht wie ich ein Poti für die Geschwindigkeit einbinde...

Code: [Select]


#include <Adafruit_NeoPixel.h>
 
#define N_LEDS 22
#define PIN     4
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
 
void setup() {
  strip.begin();
}
 
int pos = 0, dir = 1; // Position, direction of "eye"
 
void loop() {
  int j;
 
  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 2, 0x100000); // Dark red
  strip.setPixelColor(pos - 1, 0x800000); // Medium red
  strip.setPixelColor(pos    , 0xFF3000); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x800000); // Medium red
  strip.setPixelColor(pos + 2, 0x100000); // Dark red
 
  strip.show();
  delay(30);
 
  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);
 
  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}


Farben und Geschwindigkeit muss ich gleich mal schauen wie ich das ändere
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 17, 2019, 02:17 pm
Farben und Geschwindigkeit muss ich gleich mal schauen wie ich das ändere
Geschwindigkeit: delay(30);

Aber delay() führt Dich in eine Sackgasse, besser wäre die Verwendung von millis().
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 03:38 pm
ja , das ist erstmal ein übernommener Sketch.

Mit Farbe und Delay hab ich das rausgefunden...

nun liegt mal die Herausforderung auf dem Sketch inkl Poti.....
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 17, 2019, 03:59 pm
nun liegt mal die Herausforderung auf dem Sketch inkl Poti.....
Erster Versuch:

Code: [Select]
delay(analogRead(A0));
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 04:47 pm
Also reicht es vorm setup

int potPin = 0;

Und dann

delay(analogRead(potPin));

?!
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 17, 2019, 06:25 pm
Ja, besser gefiele mir

const byte potPin = 0;

oder

const byte potPin = A0;
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 06:40 pm
also hab es so versucht auch  mit 0 anstatt A0 oder mit int potPin

aber leider ändert sich die Geschwindigkeit nicht.

Code: [Select]

#include <Adafruit_NeoPixel.h>
 
#define N_LEDS 15
#define PIN     6

 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

const byte potPin = A0;

void setup() {
  strip.begin();
}
 
int pos = 0, dir = 1; // Position, direction of "eye"
 
void loop() {
  int j;
 
  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 1, 0x696969); // Medium red
  strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x696969); // Medium red
 
 
  strip.show();
  delay(analogRead(potPin));
 
  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);
 
  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}

Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 17, 2019, 06:48 pm
Hi

Jaaahaaa - war wieder zu langsam - bleibt jetzt (Mal wieder) trotzdem stehen - vll. findet ja Jemand nützliche Informationen hier drin.

Zum Sketch:
In setup() ein
serialBegin(9600);  //startet die serielle Schnittstelle
Und in loop() für den analogRead():
uint16_t analogWert=analogRead(potPin);
serialPrint("Analog-Wert:");  //gibt Text/Variablen auf der Seriellen aus
serial.println(analogWert);  //siehst Du im 'Terminal' - die Lupe in der IDE rechts oben
delay(analogWert);


Warum int?
Erwartest Du negative Pin-Nummern?
Bis in den Bereich -32768...32767 ??
Wäre Das nicht eher ein MAKRO-Kontroller?

Also: nicht negativ: unsigned
Bereich bis 255: Byte (ist eh unsigned, alternativ unsigned char (wenn Das geht) oder uint8_t - Alles das Gleiche).
Werden sich die Pin-Nummern während der Laufzeit ändern?
Nein? -> const
const byte potPin=0;
Kommt auf einen Versuch (oder Blick in die Referenz) an, ob diese 0 D0 oder A0 (=D14) beim analogRead interpretiert wird.
D0 und D1 werden vom USB-Anschluss / Serial benutzt - sind also pfui.

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 07:05 pm
ja über Serial Print habe ich mir das auch schon anzeigen lassen, immer 1023....

wenn ich den Poti abziehe , geht der wert runter und die LEDS schneller.... pendelt sich +- bei 400 ein....
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 07:14 pm
Habs... es schien wohl am GND der Direkt neben den 5V lag gelegen zu haben.

super. vielen dank....

erste Hürde gemeistert... Dank an euch.

nun soll bei Tastendruck ein zweiter Effekt beginnen ... vielleicht erstmal ... alle LED an
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 17, 2019, 07:22 pm
Vorher solltest Du delay durch millis ersetzen, das verträgt sich nicht mit Tastendrücken.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 07:27 pm
Ich hasse millis xD

Ich versteh es einfach nicht

Würden Drehschalter die Sache ändern ? :D
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 17, 2019, 07:41 pm
Hi

Hast Du Dir die Nachtwächtererklärung durchgelesen?
Siehe diese Liste:Klick (http://forum.arduino.cc/index.php?topic=586959.msg3993031#msg3993031)

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 07:59 pm
Ja schon tausend mal .

Naja gut . Evtl nur 15 mal ....

Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 17, 2019, 08:31 pm
Würden Drehschalter die Sache ändern ? :D
Ja.

Ein codierter Drehschalter (https://www.conrad.de/de/p/nkk-switches-fr01kr16h-s-drehschalter-50-v-dc-0-1-a-schaltpositionen-16-1-st-702879.html) spart Pins.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 17, 2019, 09:06 pm
Hi
Ja schon tausend mal .

Naja gut . Evtl nur 15 mal ....
Und was ist daran so schwer, sich die Start-Zeit von Etwas zu merken und JEDES MAL zu prüfen, ob JETZT-Startzeit>=Wartezeit ist? Dann ist nämlich die Zeit um.
Klar musst Du Dir von JEDEM 'Etwas' die Startzeit separat merken - zumindest, wenn diese 'Etwas's' gleichzeitig funktionieren sollen.

Du machst eine LED an, merkst Dir die Uhrzeit (=millis() ).
Bei jedem Durchlauf prüfst Du, ob millis()-Startzeit größer/gleich der gewünschten Laufzeit ist.
Beim ersten Durchlauf sind Beide gleich und somit nicht größer als die Laufzeit - also machen wir ... Nichts.
Das passiert die nächsten zwanzigtausend Durchläufe dann genau so weiter.
Dann irgend wann ist die Zeit aber um - millis() (die aktuelle Uhrzeit) minus die Startzeit (millis() von damals * hüstel * ) ergibt einen Wert, Der der gewünschten Laufzeit entspricht oder übersteigt - nun können wir z.B. die LED wieder ausschalten - die Leuchtzeit ist ja jetzt um - wir merken uns erneut die aktuelle Zeit und schalten einen Status weiter, jetzt warten wir auf das Ende der AUS-Zeit, wird in den ersten zwanzigtausend Runden auch wieder zu Klein sein ... die Geschichte wiederholt sich.

Das Beispiel 'Blink_without_delay' zeigt Das anhand von LED-Blinken - quasi gleichzeitig kannst Du dein Poti auslesen und prüfen, ob millis()-Startwert>=Potiwert ist - wenn JA, dann 'eine LED weiter' - sonst machst Du hier halt Nichts - die Zeit ist noch nicht vorbei, also bleiben die LEDs, wie Sie sind.

Sonst: Bei Fragen -> Fragen!
Hier bekommt Keiner so schnell den Kopf abgerissen.

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 17, 2019, 09:40 pm
Ich werde es mir erneut durchlesen evtl fällt ja mal der Groschen...

dennoch habe ich etwas versucht... und war erfolgreich..

nun läuft das Licht und bei Tastendruck wechselt es zu dauerlicht. Erneuter Tastendruck und Es läuft wieder..

nun folgen evtl noch 1-2 weitere Effekte. und dann sollte das ganze mit 3-4-5 Effekten Reichen.

Code: [Select]

#include <Adafruit_NeoPixel.h>
 
#define N_LEDS 15
#define PIN     6

const int tasterPin = 7;
int lichtmodus = 0;
int tasterStatus = LOW;
const byte potPin = A0;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);


int n=0;
 
void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
 
}
 
int pos = 0, dir = 1; // Position, direction of "eye"
 
void loop() {
  tasterStatus = digitalRead(tasterPin);

  if (tasterStatus == LOW)
{
  lichtmodus++;
  delay(30);
}
if (lichtmodus == 0)
{
uint16_t analogWert=analogRead(potPin);
Serial.print("Analog-Wert:");  //gibt Text/Variablen auf der Seriellen aus
Serial.println(analogWert);
  int j;
 
  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 1, 0x696969); // Medium red
  strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x696969); // Medium red
 
 
  strip.show();
  delay(analogWert);
 
  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);
 
  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}
else if (lichtmodus == 1)
{
  for(n=0;n<=15;n++)
{
  strip.setPixelColor(n, 255,0,0);
}
strip.show();
}
 else
  {
    lichtmodus = 0;
  }
}


was sagt ihr dazu?


kann man in diesen Sketch evtl "einfach" das flüssige laufen einbauen ?
aktuell werden bei dem Lauflicht die LEDS ja nur eingeschaltet. würde da ein Aufhellen/Aufdimmen gehen? oder wären das große Veränderungen. Es ist halt momentan abgehackt.  auch ein Komplettes auslaufen der LED wäre super. aktuell sind am Ende immer 2 an.

Vielen Dank

Video folgt demnächst auch mal.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Deltaflyer on Apr 18, 2019, 12:37 am
delay() hilft immer, nicht flüssige Abläufe zu unterstützen.

Gruss Stefan
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Doc_Arduino on Apr 18, 2019, 01:14 am
Hallo,

wegen millis und blockierfrei. Denke an deine Armbanduhr. Du musst in 15min zur Bushaltestelle loslaufen. Bis dahin kannst du noch Wäsche waschen, bügeln, Zimmer aufräumen, Mutti beim Abwasch helfen.   :)

Während dessen schaust du regelmäßig auf deine Uhr ob die 15min vorbei sind.
Wenn ja, lässt du alles stehen und liegen und gehst zur Bushaltestelle.
Das heißt, du hast während den 15min nicht sinnfrei rumgestanden sondern noch andere sinnvolle Dinge erledigen können.

das original - Theseus erklärt millis()
http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141 (http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141)

Ein Bsp. was lesbar sein sollte.
Code: [Select]

void setup(void)
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop(void)
{
  
  heartbeat(500);

}


// ****** Funktionen ******
void heartbeat (unsigned int interval)                  // Kontrolle ob Sketch blockiert
{
  static unsigned long last_ms = 0;                     // Merker für letzten Zeitpunkt an/aus
  static bool state = LOW;                              // Merker für an/aus Status
    
  if (millis() - last_ms >= interval) {                 // Differenzzeit vorbei?
    last_ms = millis();                                 // aktuellen Zeitpunkt merken
    state = !state;                                     // negieren (zwischen an / aus umschalten)
    digitalWrite(LED_BUILTIN, state);
  }
}


Wenn du das verstanden hast, kannste alles davon ableiten.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 18, 2019, 01:15 pm
Basierend auf #52 lege ich Dir mal ein Millis-Ei ins Nest, nicht perfekt, aber bunt:

Code: [Select]

#include <Adafruit_NeoPixel.h>

#define N_LEDS 15
#define PIN     6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

const byte MAX_ANZAHL_LICHTMODI = 2;
const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus;
const byte potPin = A0;
uint32_t jetzt, vorhin, intervall, entprellMillis;
int pos = 0, dir = 1; // Position, direction of "eye"

void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println(F("Anfang"));
  intervall = analogRead(potPin);
  Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
  Serial.println(intervall);
}

void loop() {
  jetzt = millis();
  altTasterStatus = aktTasterStatus;
  aktTasterStatus = digitalRead(tasterPin);

  if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
  {
    entprellMillis = jetzt;
    if (!aktTasterStatus)
    {
      lichtmodus = (lichtmodus + 1) % MAX_ANZAHL_LICHTMODI;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
    }
  }

  switch (lichtmodus) {
    case 0:
      if (jetzt - vorhin >= intervall)
      {
        vorhin = jetzt;
        intervall = analogRead(potPin);
        Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
        Serial.println(intervall);

        // Rather than being sneaky and erasing just the tail pixel,
        // it's easier to erase it all and draw a new one next time.
        for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);

        // Draw 5 pixels centered on pos.  setPixelColor() will clip any
        // pixels off the ends of the strip, we don't need to watch for that.
        strip.setPixelColor(pos - 1, 0x696969);
        strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
        strip.setPixelColor(pos + 1, 0x696969);
        strip.show();

        // Bounce off ends of strip
        pos += dir;
        if (pos < 0) {
          pos = 1;
          dir = -dir;
        } else if (pos >= N_LEDS) {
          pos = N_LEDS - 2;
          dir = -dir;
        }
      }
      break;
    case 1:
      for (uint16_t n = 0; n < N_LEDS; n++)
      {
        strip.setPixelColor(n, 255, 0, 0);
      }
      strip.show();
      break;
    default:
      lichtmodus = 0;
  }
}

Getestet mit UNO und 9 LEDs.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 18, 2019, 02:30 pm
Vielen Dank.
Ich werde das nachher mal testen. Danke .

Aktuell stelle ich mir wieder die Frage:

Wie verkabeln.

Geht Variante 2 mit diesem Sketch oder muss etwas geändert werden und Variante 1 kommt zum tragen.

Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 18, 2019, 04:09 pm
Geht Variante 2 mit diesem Sketch ...
Sollte gehen, aber Widerstände nicht vergessen!
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 18, 2019, 04:17 pm
also so und dazwischen widerstände....
welchen Wert sollte man nehmen?Bin unterwegs und hab glaube nur 10k mitgenommen :/

und dann wird auf allen streifen das gleiche ablaufen ja?!
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 18, 2019, 04:22 pm
also so und dazwischen widerstände....
Ja.

welchen Wert sollte man nehmen?
Adafruit: "Adding a ~470 ohm resistor between your microcontroller's data pin and the data input on the NeoPixels can help prevent spikes on the data line that can damage your first pixel. Please add one between your micro and NeoPixels!" Quelle (https://learn.adafruit.com/adafruit-neopixel-uberguide/basic-connections)

und dann wird auf allen streifen das gleiche ablaufen ja?!
Würde ich so vermuten.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 18, 2019, 04:26 pm
schade..... danke.... dann muss ich warten bis ich zuhause bin.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 18, 2019, 07:31 pm
ich habe das ganze jetzt noch mit einem dritten Effekt, Strobo versucht . aber irgendwie hackt es zwischen den Programmen nun... und ja ich schaue mir das mit Millis() nachher nochmal an.

strobo geht nur wenn ich den Knopf gedrückt halte....

Code: [Select]

#include <Adafruit_NeoPixel.h>
 
#define N_LEDS 15
#define PIN     6

const int tasterPin = 7;
int lichtmodus = 0;
int tasterStatus = LOW;
const byte potPin = A0;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
//Adafruit_NeoPixel pixels = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
//int delayval = 500;
int n=0;
 
void setup() {
  strip.begin();
  //pixels.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
 
}
 
int pos = 0, dir = 1; // Position, direction of "eye"
 
void loop() {
  tasterStatus = digitalRead(tasterPin);

  if (tasterStatus == LOW)
{
  lichtmodus++;
  delay(30);
}
if (lichtmodus == 0)
{
uint16_t analogWert=analogRead(potPin);
Serial.print("Analog-Wert:");  //gibt Text/Variablen auf der Seriellen aus
Serial.println(analogWert);
  int j;
 
  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 1, 0x696969); // Medium red
  strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x696969); // Medium red
 
 
  strip.show();
  delay(analogWert);
 
  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);
 
  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}
else if (lichtmodus == 1)
{
  for(n=0;n<=15;n++)
{
  strip.setPixelColor(n, 138,43,226);
}
strip.show();
}
else if (lichtmodus == 2)
{
  for(n=0;n<15;n++)
  {
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    strip.setPixelColor(n, strip.Color(0,150,0)); // Moderately bright green color.
  }
  {
    strip.show(); // This sends the updated pixel color to the hardware.
   
  }
  }

 else
  {
    lichtmodus = 0;
  }
}

_______
EDIT;

so es funktioniert super, auch mit Millis und Storno

Code: [Select]

#include <Adafruit_NeoPixel.h>

#define N_LEDS 15
#define PIN     6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

const byte MAX_ANZAHL_LICHTMODI = 3;
const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus;
const byte potPin = A0;
uint32_t jetzt, vorhin, intervall, entprellMillis;
int pos = 0, dir = 1; // Position, direction of "eye"
#define INTER_FLASH_DELAY 30
#define INTER_FLASH_COUNT 10
void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println(F("Anfang"));
  intervall = analogRead(potPin);
  Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
  Serial.println(intervall);
}

void loop() {
  jetzt = millis();
  altTasterStatus = aktTasterStatus;
  aktTasterStatus = digitalRead(tasterPin);

  if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
  {
    entprellMillis = jetzt;
    if (!aktTasterStatus)
    {
      lichtmodus = (lichtmodus + 1) % MAX_ANZAHL_LICHTMODI;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
    }
  }

  switch (lichtmodus) {
    case 0:
      if (jetzt - vorhin >= intervall)
      {
        vorhin = jetzt;
        intervall = analogRead(potPin);
        Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
        Serial.println(intervall);

        // Rather than being sneaky and erasing just the tail pixel,
        // it's easier to erase it all and draw a new one next time.
        for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);

        // Draw 5 pixels centered on pos.  setPixelColor() will clip any
        // pixels off the ends of the strip, we don't need to watch for that.
        strip.setPixelColor(pos - 1, 0x696969);
        strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
        strip.setPixelColor(pos + 1, 0x696969);
        strip.show();

        // Bounce off ends of strip
        pos += dir;
        if (pos < 0) {
          pos = 1;
          dir = -dir;
        } else if (pos >= N_LEDS) {
          pos = N_LEDS - 2;
          dir = -dir;
        }
      }
      break;
    case 1:
      for (uint16_t n = 0; n < N_LEDS; n++)
      {
        strip.setPixelColor(n, 138, 43, 226);
      }
      strip.show();
      break;
     case 2:
     for (uint16_t n = 0; n < N_LEDS; n++) {
       strip.setPixelColor(0, strip.Color(0, 0, 255));
    strip.setPixelColor(1, strip.Color(0, 0, 255));
    strip.setPixelColor(2, strip.Color(0, 0, 255));
    strip.setPixelColor(3, strip.Color(0, 0, 255));
    strip.setPixelColor(4, strip.Color(0, 0, 255));
    strip.setPixelColor(5, strip.Color(0, 0, 255));
    strip.setPixelColor(6, strip.Color(0, 0, 255));
    strip.setPixelColor(7, strip.Color(0, 0, 255));
    strip.setPixelColor(8, strip.Color(0, 0, 255));
    strip.setPixelColor(9, strip.Color(0, 0, 255));
    strip.setPixelColor(10, strip.Color(0, 0, 255));
    strip.setPixelColor(11, strip.Color(0, 0, 255));
    strip.setPixelColor(12, strip.Color(0, 0, 255));
    strip.setPixelColor(13, strip.Color(0, 0, 255));
    strip.setPixelColor(14, strip.Color(0, 0, 255));
   
    strip.show();
    delay(INTER_FLASH_DELAY);
    strip.setPixelColor(0, strip.Color(0, 0, 0));
    strip.setPixelColor(1, strip.Color(0, 0, 0));
    strip.setPixelColor(2, strip.Color(0, 0, 0));
    strip.setPixelColor(3, strip.Color(0, 0, 0));
    strip.setPixelColor(4, strip.Color(0, 0, 0));
    strip.setPixelColor(5, strip.Color(0, 0, 0));
    strip.setPixelColor(6, strip.Color(0, 0, 0));
    strip.setPixelColor(7, strip.Color(0, 0, 0));
    strip.setPixelColor(8, strip.Color(0, 0, 0));
    strip.setPixelColor(9, strip.Color(0, 0, 0));
    strip.setPixelColor(10, strip.Color(0, 0, 0));
    strip.setPixelColor(11, strip.Color(0, 0, 0));
    strip.setPixelColor(12, strip.Color(0, 0, 0));
    strip.setPixelColor(13, strip.Color(0, 0, 0));
    strip.setPixelColor(14, strip.Color(0, 0, 0));
 
    strip.show();
    delay(INTER_FLASH_DELAY);
     }
      break;
    default:
      lichtmodus = 0;
  }
}
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 18, 2019, 09:09 pm
Jez noch ein
Fade in fade out

Was ich sehr schwer empfinde

Und dann sollte das eigentlich reichen ....
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Doc_Arduino on Apr 18, 2019, 09:18 pm
Hallo,

was soll dein case 2 machen? Das wechselt aktuell 15x die Farbe auf allen LEDs?
N_LEDS in deiner case 2 for Schleife hat dann aber nichts mit der LED Anzahl zu tun.

Man könnte die Code Vielfachen abkürzen wie folgt.
Code: [Select]

const byte N_LEDS = 15;


Code: [Select]
case 2:
      for (byte n = 0; n < N_LEDS; n++) {
        setFarbe(N_LEDS, 0, 0, 255);     // alle blau
        strip.show();
        delay(INTER_FLASH_DELAY);
        setFarbe(N_LEDS, 0, 0, 0);       // alle aus
        strip.show();
        delay(INTER_FLASH_DELAY);
      }
      break;


Code: [Select]
void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i=0; i<n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  }  
}

Dann erhält man wieder mehr Überblick und der Umbau auf millis() fällt leichter.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 09:21 am
Aber ich hab doch im Sketch oben mit define n_leds 15 die bereits festgelegt oder ?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 19, 2019, 10:23 am
#define N_LEDS 15          // Textersetzung
const byte N_LEDS = 15;  // Konstante mit Typprüfung

Dieser kleine Unterschied ist aber nicht der springende Punkt! Es geht um die Verwendung einer Funktion zum Zusammenfassen und Aufräumen.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 10:32 am
Gut, verstehe, denk ich.

Ja ich war erstmal froh das es so funktioniert hat.
Aufräumen ist gut.

leider weiß ich noch nicht wie ich
Code: [Select]
void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i=0; i<n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  } 
}



in mein Sketch einbau.

auch mit diesem Fade in/out (https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#LEDStripEffectFadeInandFadeOutYourownColors)

hab ich probleme beim verständnis und einfügen  :smiley-confuse:
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 19, 2019, 10:48 am
leider weiß ich noch nicht wie ich ...
in mein Sketch einbau.
Code: [Select]
void setup() {
...
}
 
void loop() {
...
}

void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i=0; i<n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  }
}

void FadeInOut(byte red, byte green, byte blue){
  float r, g, b;

  for(int k = 0; k < 256; k=k+1) {
    r = (k/256.0)*red;
    g = (k/256.0)*green;
    b = (k/256.0)*blue;
    setAll(r,g,b);
    strip.show();
  }

  for(int k = 255; k >= 0; k=k-2) {
    r = (k/256.0)*red;
    g = (k/256.0)*green;
    b = (k/256.0)*blue;
    setAll(r,g,b);
    strip.show();
  }
}



Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 11:32 am
Danke

aber ich meint vorrangig das aus Beitrag #63

oder übersehe ich grad was ...
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 11:48 am
so funktioniert es...

wärt ihr damit zufrieden?

Code: [Select]

#include <Adafruit_NeoPixel.h>
const byte N_LEDS = 15;
#define N_LEDS 15
#define PIN     6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);


const byte MAX_ANZAHL_LICHTMODI = 3;
const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus;
const byte potPin = A0;
uint32_t jetzt, vorhin, intervall, entprellMillis;
int pos = 0, dir = 1; // Position, direction of "eye"

#define INTER_FLASH_DELAY 30
#define INTER_FLASH_COUNT 10


void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println(F("Anfang"));
  intervall = analogRead(potPin);
  Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
  Serial.println(intervall);
}

void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i=0; i<n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  } 
}

void loop()
{
  jetzt = millis();
  altTasterStatus = aktTasterStatus;
  aktTasterStatus = digitalRead(tasterPin);

  if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
  {
    entprellMillis = jetzt;
    if (!aktTasterStatus)
    {
      lichtmodus = (lichtmodus + 1) % MAX_ANZAHL_LICHTMODI;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
    }
  }

 
  switch (lichtmodus)
  {
    case 0:
      if (jetzt - vorhin >= intervall)
      {
        vorhin = jetzt;
        intervall = analogRead(potPin);
        Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
        Serial.println(intervall);

        // Rather than being sneaky and erasing just the tail pixel,
        // it's easier to erase it all and draw a new one next time.
        for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);

        // Draw 5 pixels centered on pos.  setPixelColor() will clip any
        // pixels off the ends of the strip, we don't need to watch for that.
        strip.setPixelColor(pos - 1, 0x696969);
        strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
        strip.setPixelColor(pos + 1, 0x696969);
        strip.show();

        // Bounce off ends of strip
        pos += dir;
        if (pos < 0) {
          pos = 1;
          dir = -dir;
        } else if (pos >= N_LEDS) {
          pos = N_LEDS - 2;
          dir = -dir;
        }
      }
      break;
   case 1:
      for (uint16_t n = 0; n < N_LEDS; n++)
        {
          strip.setPixelColor(n, 138, 43, 226);
        }
      strip.show();
      break;
   case 2:
     for (byte n = 0; n < N_LEDS; n++)
        {
          setFarbe(N_LEDS, 0, 0, 255);     // alle blau
          strip.show();
          delay(INTER_FLASH_DELAY);
          setFarbe(N_LEDS, 0, 0, 0);       // alle aus
          strip.show();
          delay(INTER_FLASH_DELAY);
        }
      break;
    default:
      lichtmodus = 0;
  }
}



so nun zum Fade
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Doc_Arduino on Apr 19, 2019, 12:11 pm
Zufrieden? Ist Ansichtssache. Du drückst dich vor millis() ohne Ende. Derweile baust du den Sketch immer weiter aus. Hast du noch nicht mitbekommen das der Sketch träge reagiert wenn du den Lichtmodus ändern möchtest?
Dein case 2: blockiert für satte 900ms (15 * 2 * 30 ms) die loop.

In case 0 nimmst du schon millis. Scheinbar nicht konsequent oder unbewußt.

Ich sehe 2 Möglichkeiten
a) dich stört das nicht, dann kannste so weitermachen
b) dich stört es, dann lerne den Umgang mit millis und bau alles komplett neu auf. Mit einheitlichen Datentypsyntax und ohne define. Das ist sonst schwer lesbar. Genauso wie die case Nummern in 3 Monaten schwer lesbar werden. Welche Nummer welche Lichtfunktion darstellt. Nimm enum mit switch-case. Notfalls bauste dir noch einen Dolmetscher dazwischen, der zwischen die Lichtmodusnummern in enums übersetzt. Alles in extra Funktionen, dann ist das alles kein Problem und leichter wartbar.

Immer daran denken, deine loop und eben das ewig aufgerufende switch-case müssen immer ohne Pause durchlaufen können. Als Pause ohne Blockierung nimmste ein case was mittels if wartet bis die Zeit vorbei ist. Danach springt das case wieder dorthin wo es etwas machen soll. Nichts blockiert, alles im Fluß. Erfordert umdenken und Übung. Aber ganz ehrlich. Ohne dem kommst du nicht wirklich weiter.

Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 12:26 pm
na ich muss das schon noch ordentlich lernen.

nicht konsequent und unbewusst....
bisher freute ich mich immer wenn es doch funktioniert.

aber in der tat ist mir beim durchschalten aufgefallen das es von Case 2 auf 0 wieder lange dauert bis er das nimmt....


vielen dank für dein Kommentar....

noch sehr viel zu lernen ich hab
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 04:02 pm
...
Dein case 2: blockiert für satte 900ms (15 * 2 * 30 ms) die loop.
....

Gebe zu.... ich finds nicht. ich weiß nicht wie ich das ändere....
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 19, 2019, 04:07 pm
Hi

Indem Du in 'case 2' eine neue Status-Variable erzeugst und mit Dieser einen neuen Endlichen Automat realisierst.
So kommst Du jedes Mal in Deinen 'case 2', und dort, je nach Status, machst Du was, oder eben nicht.
Beim letzten Status änderst Du den Status, Der Dich zu 'case 2' gebracht hat - schätze, wird dann wohl '3' werden - kA.

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 05:01 pm
Dann habe ich den Sketch, wie aus Beitrag #55, falsch weiter geführt mit Case 2?!

Dann versteh ich es wirklich noch nicht... verstehe nicht warum das so schwer ist zu verstehen für mich
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Doc_Arduino on Apr 19, 2019, 05:16 pm
Hallo,

aktuell verstehe ich nicht wo es gedanklich klemmt.
In #71 hast du meine Blockierung bestätigt.
In #72 findest du plötzlich die Blockierung nicht mehr
In #74 redest du plötzlich von #55 in der es gar kein case 2 gibt
Verstehe ich nur noch Bahnhof?

Das Fading kannste einbauen wenn du millis angewendet hast. Ansonsten erzeugst du noch mehr Kaos und baust dann später noch mehr um und siehst den Wald nicht mehr.

Notbremse. Vergiss erstmal den Sketch. Lege ihn beiseite. Befasse dich umgehend mit millis.
#54 war der Wink. Irgendwo war noch ein Link zum Nachtwächter verlinkt.
Lasse blockierfrei in langen Perioden eine LED blinken und gleichzeitig reagiert eine 2. LED auf Tasterdruck.
Erst wenn du das Schema verinnerlicht hast kannste am Sketch weitermachen.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 05:27 pm
Moin

die Blockierung habe ich bestätigt im sinne von : jaa das hackt beim tasten drücken bis es von vorne los geht.

in #72 war ich auf der suche danach und konnte aber nicht finden woran es nun mal liegt ....

und #55 wurde mir ja der Millisekunden Sketch gezeigt und da hatte ich einfach versucht case 2 einzufügen... aber evtl falsch gemacht... dachte es wäre eine einfache Erweiterung
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Doc_Arduino on Apr 19, 2019, 06:13 pm
Hallo,

siehst du die Blockierung wirklich nicht?
delay(x) blockiert - das weißt du doch hoffentlich.
dieses delay kommt in deiner for Schleife 2x vor. Also sind wir schon bei 2x delay, was 2x30ms ist.
Die for Schleife wird 15x ausgeführt. Also sind wir bei 15 x 2 x 30ms = 900ms.

Letztes Bsp. blockierfreies switch case. Die Pausenzustände werden solange immer wieder angesprungen bis die Zeit abgelaufen ist. Während dessen landet der Programmablauf immer wieder in der loop und kann dort andere Dinge tun. Wie zum Bsp. den heartbeat abarbeiten.

Code: [Select]
const byte pin_Taster2 = 2;
const byte pin_LED12 = 12;
const byte pin_LED13 = 13;
const unsigned int BLINKPAUSE = 1000;
unsigned long zeitmerker;
          
enum state {EIN, PAUSE_EIN, AUS, PAUSE_AUS, NICHTS};
state zustand = NICHTS;

void setup() {
  pinMode(pin_Taster2, INPUT_PULLUP);
  pinMode(pin_LED12, OUTPUT);
  pinMode(pin_LED13, OUTPUT);
}

void loop() {
  
  steuerung();

  heartbeat(pin_LED12, 500);

}


void steuerung ()
{
  switch (zustand) {
    case NICHTS:
                if (update_Taster2() ) {
                  zustand = EIN;
                }
                break;

    case EIN:
                digitalWrite(pin_LED13, HIGH);
                zeitmerker = millis();
                zustand = PAUSE_EIN;
                break;

    case PAUSE_EIN:
                if ( millis() - zeitmerker > BLINKPAUSE) {
                  zustand = AUS;
                }
                break;

    case AUS:
                digitalWrite(pin_LED13, LOW);
                zeitmerker = millis();
                zustand = PAUSE_AUS;
                break;

    case PAUSE_AUS:
                if ( millis() - zeitmerker > BLINKPAUSE) {
                  zustand = NICHTS;
                }
                break;
                            
    default: zustand = AUS;
             break;
  }

}


bool update_Taster2()
{
  static unsigned long last_ms = 0;
  static bool state = false;

  if (millis() - last_ms > 40) {
    last_ms = millis();
    state = !(digitalRead(pin_Taster2));
  }
  return state;
}


void heartbeat (const byte led, unsigned int interval)           // Kontrolle ob Sketch blockiert
{
  static unsigned long last_ms = 0;
  static bool state = LOW;
  
  unsigned long ms = millis();
  
  if (ms - last_ms >= interval) {
    last_ms = ms;
    state = !state;
    digitalWrite(led, state);
  }
}


Dann musst du dir noch eine Funktion schreiben die von 0 bis 15 zählt und dabei immer den zustand erneut EIN schaltet. Die Zählfunktion muss natürlich blockierfrei sein. Es verbietet sich for. Sonst blockiert heartbeat. Wenn du das hast, kannste das Wissen auf deinen Sketch anwenden.

Das mit millis können nur Bsp. sein. Du musst den Ablauf verstehen. Was machst du mit deiner Armbanduhr. Dann kannst du das in allen Varianten anwenden.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 19, 2019, 07:00 pm
Gut.

also muss ich wohl erstmal alles beiseite legen... und lesen und verstehen....

Doch nicht so einfach wie ich dachte.

Wenn ich Drehschalter nehme... muss das ganze ja auch anders aufgebaut werden, richtig?!
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Doc_Arduino on Apr 19, 2019, 08:11 pm
Hallo,

ob Taster oder Drehschalter ist völlig egal. Auch beim Drehschalter möchtest du das dein Programm unverzögert reagiert. Auch der Drehschalter muss ständig eingelesen werden können. Genau wie der/die Taster. Wenn du unmittelbare Reaktionen auf Ereignisse erwartest musst du dafür sorgen das der Programmablauf nicht blockiert wird.

Guck dir heartbeat an. Was macht das Teil während den 500ms?
Die Frage beantwortest du dir selbst.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 19, 2019, 09:48 pm
also muss ich wohl erstmal alles beiseite legen... und lesen und verstehen....
Ja, das würde Dich weiterbringen.

Wenn ich Drehschalter nehme... muss das ganze ja auch anders aufgebaut werden, richtig?!
Ich erlaube mir eine andere Sichtweise als Doc_Arduino. Ein Drehschalter rastet an der eingestellten Stelle und kann solange auf den µC warten, bis der vor lauter delays mal vorbeischaut, um die Pins zu lesen. Wenn es Dich nicht stört, daß eine Reaktion auf eine neue Stellung des Drehschalters eine Weile dauern kann, dann kannst Du diese Variante anstreben.

Wenn also die Gefahr besteht, Du kloppst den Arduino in die Tonne, weil Dir der Spaß vergeht, dann nimm lieber den Drehschalter und delays. Nach den Partys mit LED-Beleuchtung kannst Du mit einem zweiten Arduino millis versuchen.

 :smiley-twist:  :smiley-twist:  :smiley-twist:

In der Sonne des Tages liegend  8)  kam mir folgende Idee: Da es mir selbst erst über Umwege gelang, den Sinn von millis() zu verstehen, mache ich Dir mal den Vorschlag, ein eigenes delay zu kreieren. Bei mir heißt die Funktion verzoegerung() und enthält alle zeitkritischen Dinge wie die Tastenabfrage. Selbstverständlich wird die Verzögerung mittels millis() realisiert. Überall in Deinem Programm, wo delay(x) steht, ersetzt Du das durch verzoegerung(x). Das sieht dann so aus:

Code: [Select]

#include <Adafruit_NeoPixel.h>
#define N_LEDS 15
#define PIN     6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus;
const byte potPin = A0;
uint32_t intervall;
int pos = 0, dir = 1; // Position, direction of "eye"

#define INTER_FLASH_DELAY 30
#define INTER_FLASH_COUNT 10

void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println(F("Anfang"));
  intervall = analogRead(potPin);
  Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
  Serial.println(intervall);
}

void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i = 0; i < n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  }
}

void verzoegerung(uint32_t zeit)
{
  uint32_t entprellMillis = 0, vorhin = millis();
  while (1)
  {
    uint32_t jetzt = millis();
    altTasterStatus = aktTasterStatus;
    aktTasterStatus = digitalRead(tasterPin);

    if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
    {
      entprellMillis = jetzt;
      if (!aktTasterStatus)
      {
        lichtmodus++;
        Serial.print(F("Neuer Lichtmodus: "));
        Serial.println(lichtmodus);
        break;
      }
    }

    if (jetzt - vorhin >= zeit)
    {
      break;
    }
  }
}

void loop()
{
  verzoegerung(0);  // damit die Tasten immer abgefragt werden
  switch (lichtmodus)
  {
    case 0:
      intervall = analogRead(potPin);
      Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
      Serial.println(intervall);

      // Rather than being sneaky and erasing just the tail pixel,
      // it's easier to erase it all and draw a new one next time.
      for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);

      // Draw 5 pixels centered on pos.  setPixelColor() will clip any
      // pixels off the ends of the strip, we don't need to watch for that.
      strip.setPixelColor(pos - 1, 0x696969);
      strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
      strip.setPixelColor(pos + 1, 0x696969);
      strip.show();
      verzoegerung(intervall);

      // Bounce off ends of strip
      pos += dir;
      if (pos < 0) {
        pos = 1;
        dir = -dir;
      } else if (pos >= N_LEDS) {
        pos = N_LEDS - 2;
        dir = -dir;
      }
      break;
    case 1:
      for (uint16_t n = 0; n < N_LEDS; n++)
      {
        strip.setPixelColor(n, 138, 43, 226);
      }
      strip.show();
      break;
    case 2:
      for (byte n = 0; n < N_LEDS; n++)
      {
        setFarbe(N_LEDS, 0, 0, 255);     // alle blau
        strip.show();
        verzoegerung(INTER_FLASH_DELAY);
        setFarbe(N_LEDS, 0, 0, 0);       // alle aus
        strip.show();
        verzoegerung(INTER_FLASH_DELAY);
      }
      break;
    default:
      lichtmodus = 0;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
  }
}

Getestet mit UNO und 9 LEDs.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 12:39 pm
Chapeau!

Recht herzlichen Dank. Es funktioniert tadellos. Habe heute mal die zweite LED leiste mit angeschlossen. auch das , ohne Probleme.

Ihr habt alle irgendwo recht. Einerseits sollte ich mich damit wirklich auseinander setzen und endlich mal verstehen, weil es ja auch nicht meine erste kleine Spielerei ist.

Aber warum auch immer , geht es noch nicht in mein Kopf.

Andererseits, weiß ich, wenn ich das nicht verstehe, wird das Projekt entweder so eingebaut mit Macken oder beiseite gelegt weil ich wirklich kein Bock mehr habe..... und das wäre für das Projekt , für mich und diesen Beitrag (weil er nicht vollendet wird) auch schade...

Ich danke dir wirklich.

Ich werde das anhand deines Sketches noch einige male durchlesen und versuchen zu verstehen und noch zu erweitern, hoffentlich richtig und sinnvoll.  Es soll ja auch nur noch Fade in Out folgen.

Ich wünsche euch ein schönes sonniges Wochenende...
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 20, 2019, 03:40 pm
Es soll ja auch nur noch Fade in Out folgen.
Das kann man sich doch bei LEDStrip Effect - Fade In and Fade Out Your own Color(s) (https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#LEDStripEffectFadeInandFadeOutYourownColors) abschauen. Bei jedem Tastendruck läuft der Effekt aber erst bis zum Ende - der Nachteil dieser Art der Programmierung - aber mittels des Merkers ohneVerzoegerung kann man es beschleunigen.

Code: [Select]
#include <Adafruit_NeoPixel.h>
#define N_LEDS 15
#define PIN     6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus, ohneVerzoegerung;
const byte potPin = A0;
uint32_t intervall;
int pos = 0, dir = 1; // Position, direction of "eye"

#define INTER_FLASH_DELAY 30
#define INTER_FLASH_COUNT 10
#define INTER_FADE_DELAY 10

void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println(F("Anfang"));
  intervall = analogRead(potPin);
  Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
  Serial.println(intervall);
}

void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i = 0; i < n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  }
}

void verzoegerung(uint32_t zeit)
{
  if (ohneVerzoegerung) return;
  uint32_t entprellMillis = 0, vorhin = millis();
  while (1)
  {
    uint32_t jetzt = millis();
    altTasterStatus = aktTasterStatus;
    aktTasterStatus = digitalRead(tasterPin);

    if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
    {
      entprellMillis = jetzt;
      if (!aktTasterStatus)
      {
        lichtmodus++;
        ohneVerzoegerung = true;  // bei einem Wechsel des Lichtmodus möglichst schnell weiter
        Serial.print(F("Neuer Lichtmodus: "));
        Serial.println(lichtmodus);
        break;
      }
    }

    if (jetzt - vorhin >= zeit)
    {
      break;
    }
  }
}

void loop()
{
  ohneVerzoegerung = false;
  verzoegerung(0);  // damit die Tasten immer abgefragt werden
  switch (lichtmodus)
  {
    case 0:
      intervall = analogRead(potPin);
      Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
      Serial.println(intervall);

      // Rather than being sneaky and erasing just the tail pixel,
      // it's easier to erase it all and draw a new one next time.
      for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);

      // Draw 5 pixels centered on pos.  setPixelColor() will clip any
      // pixels off the ends of the strip, we don't need to watch for that.
      strip.setPixelColor(pos - 1, 0x696969);
      strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
      strip.setPixelColor(pos + 1, 0x696969);
      if (!ohneVerzoegerung) strip.show();
      verzoegerung(intervall);

      // Bounce off ends of strip
      pos += dir;
      if (pos < 0) {
        pos = 1;
        dir = -dir;
      } else if (pos >= N_LEDS) {
        pos = N_LEDS - 2;
        dir = -dir;
      }
      break;
    case 1:
      for (uint16_t n = 0; n < N_LEDS; n++)
      {
        strip.setPixelColor(n, 138, 43, 226);
      }
      if (!ohneVerzoegerung) strip.show();
      break;
    case 2:
      for (byte n = 0; n < N_LEDS; n++)
      {
        setFarbe(N_LEDS, 0, 0, 255);     // alle blau
        if (!ohneVerzoegerung) strip.show();
        verzoegerung(INTER_FLASH_DELAY);
        setFarbe(N_LEDS, 0, 0, 0);       // alle aus
        if (!ohneVerzoegerung) strip.show();
        verzoegerung(INTER_FLASH_DELAY);
      }
      break;
    case 3:
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0xff, 0xff, 0xff);
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0xff, 0x00, 0x00);
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0x00, 0xff, 0x00);
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0x00, 0x00, 0xff);
      break;
    default:
      lichtmodus = 0;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
  }
}

void FadeInOut(uint16_t led, byte red, byte green, byte blue) {
  float r, g, b;

  for (int k = 0; k < 256; k = k + 1) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor(led, r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }

  for (int k = 255; k >= 0; k = k - 2) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor(led, r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }
}

Getestet mit UNO und 9 LEDs.

Die Fade-Geschwindigkeit könnte man natürlich noch variabel gestalten.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 05:35 pm
Jez hast du mir das vorweg genommen :) aber danke.

Möchtest du dass das hier ein ende hat !? ;)

Ich werd das nachher mal testen. aber sollte wohl klappen....


jetzt kommen allerdings wieder neue gedanken auf.... ich hab ja noch einige IR fernbedienungen hier :)

anstatt des Tasters evtl eine Fernbedienung!?  Nachteil, der empfänger kann ja nicht irgendwo versteckt verbaut werden .....mh

aber das werde ich mir nächstes mal anschauen...  mit tastern auslesen und einbinden.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 20, 2019, 05:43 pm
Hi

IR-Fernbedienung und WS2812B sind ein etwas mühseliges Thema.
In der Zeit, Die die WS2812B angesteuert werden, sind Interrupts abgeschaltet - in der Zeit wird auch keine IR-Fernbedienung erkannt oder gar mitgelesen (die serielle Schnittstelle würde ja den Puffer auch im Hintergrund füllen) - klappt hier aber nicht, da das Timing äußerst schwierig ist.

Du wirst also die IR-Fernbedienung nur selten 'verstehen' - und wenn man 10x drücken muß, bevor 'das Gelump' reagiert ... Freude sieht anders aus.

Heißt aber nicht, daß Das unmöglich wäre, aber wesentlich einfacher ist's mit LEDs, Die eine eigene Takt und Data-Leitung haben (aka APA102) - dort kann der Interrupt für die serielle Schnittstelle an bleiben, weshalb hier die Signale immer verstanden werden.

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 05:48 pm
Moin,

ok vielen Dank , also dann der zweite Grund, warum das keine gute idee ist....

Dann werd ich mal weiter überlegen, was außer dem Taster, noch eine Möglichkeit wäre. oder dem besagten Drehschalter.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 20, 2019, 06:04 pm
Möchtest du dass das hier ein ende hat !? ;)
Ich möchte, daß Du selbst neue Animationen einbauen kannst.

Dann werd ich mal weiter überlegen, was außer dem Taster, noch eine Möglichkeit wäre. oder dem besagten Drehschalter.
Ein Drehschalter zeigt mechanisch die eingestellte Aniumation an, ein Taster benötigt dazu eine Anzeige. Möglich wäre eine 8x8 Led Matrix (https://www.amazon.de/AZDelivery-MAX7219-Matrix-Anzeigemodul-Arduino/dp/B079HVW652/ref=sr_1_2?keywords=8x8+Led+Matrix&qid=1555776102&s=gateway&sr=8-2) mit MAX7219.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 06:41 pm
Tja . Ob ich eine grafische Anzeige benötige ..... denke n normaler Drehschalter würde da doch reichen
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 07:13 pm
tja so schön das ganze war und ich jetzt schön weiter testen wollte,.... aber nein... habe eben dummerweise wegen einem anderen Projekt meine Nano gegrillt..... hat mal kurz gequalmt und das wars.. nun heisst es warten und gleich mal n neuen bestellen.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 07:53 pm
Kommando zurück, ich hab noch einen zweiten Nano in meiner Wühltasche gefunden, was n gluck.

beim Fade lädt er aber nach und nach eine LED aufhellen und abdunkeln. nicht alle zusammen.

in dem Video funktionieren ja alle parallel. muss ich mal durchschauen ob ich das finde.... aber danke
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 20, 2019, 08:15 pm
Hi

So ein Nano ist ein Rudel-Chip - alleine schon, um mit Amnesty International keinen Ärger zu bekommen, sollte man die Dinger nicht einzeln halten ;)
... oder anders ausgedrückt:
Man kann die Dinger auch einzeln kaufen??
Warum sollte ich so was tun?

Ok, zurück zu Deinem Sketch:
Wenn jetzt immer eine LED nach der Anderen hochdimmt, wird Das wohl so in Deinem Sketch stehen - analysiere, was in Deinem SKetch passiert, dann ist die Anpassung, daß Alle gleichzeitig hochdimmen, keine größere Änderung mehr.
Vll. passiert Es Dir, daß der Stripe dann so oft hochdimmt, wie LEDs vorhanden sind ... ;)

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 20, 2019, 08:17 pm
beim Fade lädt er aber nach und nach eine LED aufhellen und abdunkeln. nicht alle zusammen.
Das ist meiner Kreativität geschuldet. Einfach nur nachmachen ist ja langweilig.

Ich stellte mir diese Animation an meiner Bar vor. Da fände ich es schön, wenn eine Flasche nach der nächsten illuminiert wird, am besten in zufälliger Reihenfolge. Immer von  links nach rechts ist fade und alle zusammen auch. Aber die Geschmäcker sind verschieden. Du könntest mehrere Varianten Deinen Gästen zur Abstimmung geben. Du wirst sehen, bei 20 Gästen gibt es 25 Meinungen.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 08:18 pm
naja einzeln nicht gekauft, aber bin beruflich unterwegs und hab halt nicht meinen ganzen Baukasten mit xD

aber ein zweiter hatte sich ja wegen der Rudel Chip geschichte in die tasche geschlichen....

ja werd das ganze mal versuchen zu analysieren.
;)

----------------------------
da hast du recht. ich werd mal sehen ob ich das rausfinde wo du Kreativ warst..... :)

also warst du auch für dich etwas kreativ ja !? ;)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 20, 2019, 08:24 pm
also warst du auch für dich etwas kreativ ja !? ;)
Ich bin hier aktiv, um was zu lernen, also ja!
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 08:27 pm
da gebe ich mir auch große mühe bei....
leider nicht immer mit erfolg :/


zufällige Reihenfolge wäre natürlich auch cool......
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 20, 2019, 09:25 pm
zufällige Reihenfolge wäre natürlich auch cool......
Da möchte ich Dir jetzt nicht den Spaß verderben, es selbst zu probieren. Schaue mal bei random() (https://www.arduino.cc/reference/en/language/functions/random-numbers/random/).
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 20, 2019, 09:55 pm
Danke ;)

Aber ehrlich , ich finde momentan echt nicht deine Kreativität wo das einzelne aufleuchten vermerkt ist .

Ich glaub ich muss morgen nochmal ran
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 20, 2019, 10:24 pm
Hi

Im case '3' wird kommt als Einziges fade in der aufgerufenen Funktion vor.
Dort wird für jede einzelne LED (Du merkst was?) die Fade-Funktion aufgerufen.
Diese wiederum fadet diese eine LED hoch und wieder runter.
Nun kommt die 2.te LED an die Reihe ...
Danach das Ganze mit einer anderen Farbe ... gesamt sind's 4 Farben (weiß, rot, grün, blau - ggf. Reihenfolge abweichend) und bei Jeder wird jede LED einzeln angesprochen.

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 21, 2019, 05:22 pm
Also muss der Hund ja hier begraben sein oder...

Code: [Select]
case 3:
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0xff, 0xff, 0xff);
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0xff, 0x00, 0x00);
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0x00, 0xff, 0x00);
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0x00, 0x00, 0xff);


Dachte es hätte was mit der led zu tun hier

Code: [Select]
void FadeInOut(uint16_t [b]led[/b], byte red, byte green, byte blue) {
  float r, g, b;

  for (int k = 0; k < 256; k = k + 1) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor([b]led[/b], r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }

  for (int k = 255; k >= 0; k = k - 2) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor([b]led[/b], r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);


aber das änderte leider nix.

_____

Random werde ich wohl nicht noch mit einbinden, weil die LEDS ja über einander sind. d.h. wenn sie zufällig an geht. gehen auch genau die drei obendrüber mit an also immer 4 in einer Vertikalen Linie. Das würde mir nicht gefallen
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 21, 2019, 07:35 pm
ich komme nicht drauf. Sitze seit 1 1/2 std davor und teste und versuche es zu verstehen.
aber nix ändert sich.

in Case 3 wird es doch definiert.
darunter in void FadeInOut wird darauf zu gegriffen oder... und es hängt ja mit dem "Led" und dem "n" in FadeinOut zusammen.

lieg ich da richtig? aber egal was ich durchspiele.... hab keine Ahnung mehr.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 21, 2019, 07:43 pm
Also muss der Hund ja hier begraben sein oder...
Ja.

Dachte es hätte was mit der led zu tun hier
Auch.

in Case 3 wird es doch definiert.
darunter in void FadeInOut wird darauf zu gegriffen oder... und es hängt ja mit dem "Led" und dem "n" in FadeinOut zusammen.

lieg ich da richtig?
Ja.

In der Variablen led steht die Nummer vom Lichtpunkt, in k die Helligkeit beim Faden.

aber egal was ich durchspiele....
Was willst Du denn erreichen?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 21, 2019, 07:47 pm
gut dann habe ich nur noch nicht den passenden Knackpunkt gefunden. MAN.

ich möchte erreichen, dass alle LEDS zusammen aufhellen .
K habe ich verstanden. das dies die Helligkeit ist. ( ist 256 eigentlich das Hellste?)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 21, 2019, 07:51 pm
ich möchte erreichen, dass alle LEDS zusammen aufhellen .
In der von mir verwendeten Vorlage wird genau das gemacht, da kannst Du den Unterschied sehen.

( ist 256 eigentlich das Hellste?)
Nein 255, denn der Wertebereich geht von 0 bis 255. Das entspricht einem vorzeichenlosen Byte.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 21, 2019, 07:54 pm
ich bitte um Entschuldigung, aber in dieser vorläge von dir,
Code: [Select]

case 3:
   
      for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0xff, 0xff, 0xff);
      //for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0xff, 0x00, 0x00);
      //for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0x00, 0xff, 0x00);
      //for (uint16_t n = 0; n < N_LEDS; n++) FadeInOut(n, 0x00, 0x00, 0xff);
      break;
    default:
      lichtmodus = 0;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
  }
}

void FadeInOut(uint16_t led, byte red, byte green, byte blue) {
  float r, g, b;

  for (int k = 0; k < 256; k = k + 1) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor(led, r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }

  for (int k = 255; k >= 0; k = k - 2) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor(led, r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }



geht die erste Led an wieder aus , dann die zweite an und aus und so weiter.

wo hab ich den nun mein Denkfehler.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 21, 2019, 07:58 pm
Du hast keinen Denkfehler, denn genau so wollte ich es ja haben.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 21, 2019, 08:00 pm
Gut,

Ich bin nur am verzweifeln wie ich alle gleichzeitig aufhelle....... ich bekomme das nicht hin und hatte gehoft, jemand könnte mich auf die richtige spur bringen
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 21, 2019, 10:32 pm
Hi

Der Funktion FadeInOut() wird genau diese eine LED übergeben, Die eben dann hoch und wieder runter fadet.
In case '3' wird in 4 FOR-Schleifen jeweils 'die nächste LED' EINZELN an diese Funktion übergeben.
Und genau in dieser Funktion wird genau die übergebene LED hoch und wieder runter gedimmt.
... blockierend ...

Wenn Du in case '3' rein schreibst, daß die LED an Pin 13 toggeln soll, wird dort genau Das passieren.

Du möchtest in case '3' eine andere Funktion aufrufen, eben Eine, Die ALLE LEDs hoch und wieder runter fadet - dafür musst Du verstehen, wie jetzt die einzelne LED die Farbe zugewiesen bekommt - DAS münzt Du um auf ALLE LEDs.
Dann hast Du Es geschafft, daß zumindest Alle LEDs gleichzeitig hoch und runter faden - halt so oft, wie Du LEDs hast (= die FOR-Schleifen in case '3').
Nun wirfst Du die FOR-Schleifen raus, nimmst noch die LED-Nummer aus dem Funktionsaufruf raus (auch in der Funktion, sonst gibt's Mecker vom Kompiler) und hast in case '3' ein hoch/runter dimmen aller LEDs.

Das 'auf die richtige Spur helfen' versuchen wir hier gerade Alle.
Nur soll's halt eine Hilfe zur Selbsthilfe werden und nicht ein Code, Den Du per C&P als Dein jetziges Allheilmittel einbindest - Du sollst (Du MUSST) den Kram schon verstehen - alleine, um selber Änderungen dran auszuführen - kann ja nicht das Ziel sein, daß Du beim nächsten Stripe, Der eben 2 LEDs länger ist, hier wieder aufschlägst um Dir einen Code abzuholen, Der 2 LEDs mehr bedient - Das soll nicht das Ziel sein!

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 22, 2019, 01:26 pm
Danke.

ich hatte das so gedacht: und getestet . aber leider meckert er im zweiten teil bei "  strip.setPixelColor(, r, g, b);  "

Code: [Select]

 case 3:
      FadeInOut(0xff, 0xff, 0xff);
   
      break;
    default:
      lichtmodus = 0;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
  }
}

void FadeInOut(byte red, byte green, byte blue) {
  float r, g, b;

  for (int k = 0; k < 256; k = k + 1) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor(r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }

  for (int k = 255; k >= 0; k = k - 2) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    strip.setPixelColor(r, g, b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }
}


Hab die anderen Farben rausgenommen weil mir weiß reichen würde.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Tommy56 on Apr 22, 2019, 01:30 pm
Und was meckert er?

Wir können das nicht nachvollziehen, da Du immer nur ein Fragment postest.

Gruß Tommy
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 22, 2019, 01:56 pm
da hast du vollkommen recht, werde ich gleich nachreichen. Hatte ich vergessen zu sagen. Kann aktuell nicht regelmäßig ran an den Nano
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 22, 2019, 01:57 pm
Hi

setPixelColor() verlangt ja auch nach vier Parametern - die Pixel-Nummer, Welche nun eine andere Farbe bekommen soll, will die Methode auch haben.
Du möchtest dieses setPixelColor(Nr,r,g,b); in eine Schleife einwickeln, Die die Nr von 0 bis PixelCount-1 hoch zählt - denke ich.

Aber natürlich darfst Du auch selber nachdenken, warum etwas nicht funktioniert.
Einfach irgendwo irgendwas hintippen und hoffe, der Kompiler mach Das schon, ist nicht programmieren!

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 22, 2019, 02:33 pm
Ich habe mir jez noch mal das von Tweaking4all angeschaut. da ja dort was mit setALL steht....

habe dann meinen etwas umgeschrieben und eingefügt...

hier der Sketch.. Es funktioniert.

Code: [Select]

#include <Adafruit_NeoPixel.h>
#define N_LEDS 15
#define PIN     6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus, ohneVerzoegerung;
const byte potPin = A0;
uint32_t intervall;
int pos = 0, dir = 1; // Position, direction of "eye"

#define INTER_FLASH_DELAY 30
#define INTER_FLASH_COUNT 10
#define INTER_FADE_DELAY 10

void setup() {
  strip.begin();
  pinMode (tasterPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println(F("Anfang"));
  intervall = analogRead(potPin);
  Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
  Serial.println(intervall);
}

void setFarbe (const byte n, byte r, byte g, byte b)
{
  for (byte i = 0; i < n; i++)
  {
    strip.setPixelColor(i, strip.Color(r, g, b));
  }
}

void verzoegerung(uint32_t zeit)
{
  if (ohneVerzoegerung) return;
  uint32_t entprellMillis = 0, vorhin = millis();
  while (1)
  {
    uint32_t jetzt = millis();
    altTasterStatus = aktTasterStatus;
    aktTasterStatus = digitalRead(tasterPin);

    if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
    {
      entprellMillis = jetzt;
      if (!aktTasterStatus)
      {
        lichtmodus++;
        ohneVerzoegerung = true;  // bei einem Wechsel des Lichtmodus möglichst schnell weiter
        Serial.print(F("Neuer Lichtmodus: "));
        Serial.println(lichtmodus);
        break;
      }
    }

    if (jetzt - vorhin >= zeit)
    {
      break;
    }
  }
}

void loop()
{
  ohneVerzoegerung = false;
  verzoegerung(0);  // damit die Tasten immer abgefragt werden
  switch (lichtmodus)
  {
    case 0:
      intervall = analogRead(potPin);
      Serial.print(F("Intervall: "));  //gibt Text/Variablen auf der Seriellen aus
      Serial.println(intervall);

      // Rather than being sneaky and erasing just the tail pixel,
      // it's easier to erase it all and draw a new one next time.
      for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);

      // Draw 5 pixels centered on pos.  setPixelColor() will clip any
      // pixels off the ends of the strip, we don't need to watch for that.
      strip.setPixelColor(pos - 1, 0x696969);
      strip.setPixelColor(pos    , 0xFFFFFF); // Center pixel is brightest
      strip.setPixelColor(pos + 1, 0x696969);
      if (!ohneVerzoegerung) strip.show();
      verzoegerung(intervall);

      // Bounce off ends of strip
      pos += dir;
      if (pos < 0) {
        pos = 1;
        dir = -dir;
      } else if (pos >= N_LEDS) {
        pos = N_LEDS - 2;
        dir = -dir;
      }
      break;
    case 1:
      for (uint16_t n = 0; n < N_LEDS; n++)
      {
        strip.setPixelColor(n, 138, 43, 226);
      }
      if (!ohneVerzoegerung) strip.show();
      break;
    case 2:
      for (byte n = 0; n < N_LEDS; n++)
      {
        setFarbe(N_LEDS, 0, 0, 255);     // alle blau
        if (!ohneVerzoegerung) strip.show();
        verzoegerung(INTER_FLASH_DELAY);
        setFarbe(N_LEDS, 0, 0, 0);       // alle aus
        if (!ohneVerzoegerung) strip.show();
        verzoegerung(INTER_FLASH_DELAY);
      }
      break;
    case 3:
   
      FadeInOut(0xff, 0xff, 0xff);
     
      break;
    default:
      lichtmodus = 0;
      Serial.print(F("Neuer Lichtmodus: "));
      Serial.println(lichtmodus);
  }
}

void FadeInOut(byte red, byte green, byte blue) {
  float r, g, b;

  for (int k = 0; k < 256; k = k + 1) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    setAll(r,g,b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }

  for (int k = 255; k >= 0; k = k - 2) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    setAll(r,g,b);
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }
}
void setAll(byte red, byte green, byte blue)
{
  for(int i = 0; i < N_LEDS; i++ )
  {
    setPixel(i, red, green, blue);
  }
strip.show();
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
 #ifdef ADAFRUIT_NEOPIXEL_H
   // NeoPixel
   strip.setPixelColor(Pixel, strip.Color(red, green, blue));
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H
   // FastLED
   leds[Pixel].r = red;
   leds[Pixel].g = green;
   leds[Pixel].b = blue;
 #endif
}


Alle LEDS werden nun gleichmäßig hoch und runter gedämmt..

es ist bestimmt noch nicht wirklich schön und im sonne des Erfinders.
Ich werde mich nun damit beschäftigen wieso es auf einmal geht und schauen ob ich es verstehe und anpassen kann...

Dennoch danke ich euch viel Mals für die starken nerven für mich und die ganze Hilfe...


ach und @Tommy um dein Beitrag nicht umkommentiert zu lassen.
Hier die Fehlermeldung

Code: [Select]


Arduino: 1.8.7 (Mac OS X), Board: "Arduino Nano, ATmega328P (Old Bootloader)"

/Users/User/Documents/Arduino/lauflicht_mit_fade_falsch/lauflicht_mit_fade_falsch.ino: In function 'void FadeInOut(byte, byte, byte)':
lauflicht_mit_fade_falsch:136:32: error: no matching function for call to 'Adafruit_NeoPixel::setPixelColor(float&, float&, float&)'
     strip.setPixelColor(r, g, b);
                                ^
In file included from /Users/User/Documents/Arduino/lauflicht_mit_fade_falsch/lauflicht_mit_fade_falsch.ino:1:0:
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:206:21: note: candidate: void Adafruit_NeoPixel::setPixelColor(uint16_t, uint8_t, uint8_t, uint8_t)
   void              setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
                     ^
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:206:21: note:   candidate expects 4 arguments, 3 provided
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:207:21: note: candidate: void Adafruit_NeoPixel::setPixelColor(uint16_t, uint8_t, uint8_t, uint8_t, uint8_t)
   void              setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b,
                     ^
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:207:21: note:   candidate expects 5 arguments, 3 provided
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:209:21: note: candidate: void Adafruit_NeoPixel::setPixelColor(uint16_t, uint32_t)
   void              setPixelColor(uint16_t n, uint32_t c);
                     ^
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:209:21: note:   candidate expects 2 arguments, 3 provided
lauflicht_mit_fade_falsch:145:32: error: no matching function for call to 'Adafruit_NeoPixel::setPixelColor(float&, float&, float&)'
     strip.setPixelColor(r, g, b);
                                ^
In file included from /Users/User/Documents/Arduino/lauflicht_mit_fade_falsch/lauflicht_mit_fade_falsch.ino:1:0:
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:206:21: note: candidate: void Adafruit_NeoPixel::setPixelColor(uint16_t, uint8_t, uint8_t, uint8_t)
   void              setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
                     ^
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:206:21: note:   candidate expects 4 arguments, 3 provided
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:207:21: note: candidate: void Adafruit_NeoPixel::setPixelColor(uint16_t, uint8_t, uint8_t, uint8_t, uint8_t)
   void              setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b,
                     ^
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:207:21: note:   candidate expects 5 arguments, 3 provided
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:209:21: note: candidate: void Adafruit_NeoPixel::setPixelColor(uint16_t, uint32_t)
   void              setPixelColor(uint16_t n, uint32_t c);
                     ^
/Users/User/Documents/Arduino/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h:209:21: note:   candidate expects 2 arguments, 3 provided
exit status 1
no matching function for call to 'Adafruit_NeoPixel::setPixelColor(float&, float&, float&)'


Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 22, 2019, 02:57 pm
Abkürzung ohne setPixel() und setAll():

Code: [Select]
void FadeInOut(byte red, byte green, byte blue) {
  float r, g, b;

  for (int k = 0; k < 256; k = k + 1) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    for (int j = 0; j < N_LEDS; j++ ) strip.setPixelColor(j, strip.Color(r, g, b));
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }

  for (int k = 255; k >= 0; k = k - 2) {
    r = (k / 256.0) * red;
    g = (k / 256.0) * green;
    b = (k / 256.0) * blue;
    for (int j = 0; j < N_LEDS; j++ ) strip.setPixelColor(j, strip.Color(r, g, b));
    if (!ohneVerzoegerung) strip.show();
    verzoegerung(INTER_FADE_DELAY);
  }
}
(ungetestet)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 22, 2019, 02:58 pm
Hi

Sehe ich jetzt erst ... warum sind r,g,b float?
Sämtliche diese Werte annehmenden Methoden wollen dort ein Byte haben.
Auch ist mir der Sinn hinter int für die Pixelnummer nicht ganz klar, wobei unsigned int keinen Speicher spart und bei Beiden wohl der Wertebereich nicht ausgeschöpft wird.
Ein unsigned int (oder byte bei der geringen Anzahl an Pixeln) hätte aber durchblicken lassen, daß Du verstanden hast, was Da abläuft.

Naja - Hauptsache: Es läuft. Verbessern kann man IMMER, traurig, aber wahr :)

MfG
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 22, 2019, 03:22 pm
Sehe ich jetzt erst ... warum sind r,g,b float?
Weil sonst die Berechnung fehlschlägt. Bei Ganzzahlenarithmetik muß man die Reihenfolge in beispielsweise
r = k * red / 256; ändern.

Ein unsigned int (oder byte bei der geringen Anzahl an Pixeln) hätte aber durchblicken lassen, daß Du verstanden hast, was Da abläuft.
Da k negativ werden kann, dürfte das nicht so einfach zu machen sein.

Die Funktion stammt aus dem vom TO verlinkten Beispiel und tut erstmal, was sie soll.

Naja - Hauptsache: Es läuft. Verbessern kann man IMMER, traurig, aber wahr :)
Eben. Wer die Schönheit des Programmierens erlernen möchte, sollte dieses Thema sowieso meiden. Auch Mephisto will mal seinen Spaß haben :smiley-twist:

Möchtest Du dem TO Ganzzahlenarithmetik und den Wertebereich von Variablen erläutern wollen, so werde ich Dich nicht davon abhalten. Nur richtig sollte es bitte sein.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 22, 2019, 03:55 pm
Hi

Den Umstand, daß k negativ werden kann, halte ich für einen Fehler der Programmierer des Beispiel, da 0 für r/g/b wohl 'Nichts' bedeuten soll - ein negativer Wert ergibt hier keinen Sinn - oder Dieser ist mir noch nicht unter gekommen.

Sollte ich Mist schreiben, gibt's hier ja durchaus Leute, Die Das korrigieren können :) (und werden)
Wegen int: Nur, weil überall (auch in den Beispielen) mit delay() um sich geworfen wird, macht's Das nicht besser - Gleiches gilt für int.

MfG

PS: Mit Mephisto wird mir von Wikipedia ein Sprengkopftyp(siehe Taurus (Marschflugkörper)#Taurus KEPD-350) vorgeschlagen ... Du machst mir Angst ;)
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: agmue on Apr 22, 2019, 05:38 pm
PS: Mit Mephisto wird mir von Wikipedia ein Sprengkopftyp(siehe Taurus (Marschflugkörper)#Taurus KEPD-350) vorgeschlagen ... Du machst mir Angst ;)
Ich bin da eher bei der Literatur, genauer beim Mephistopheles (https://de.wikipedia.org/wiki/Mephistopheles) in Goethes Faust. Ich bin sozusagen durch die Einführung der Funktion verzoegerung als Ersatz für delay mit dem Programmierteufel einen Pakt eingegangen, in der Hoffnung, den TO auf diesem Umweg zum Verständnis von millis bringen zu können. Möglicherweise hat Gott ja den Teufel erfunden, damit wir Menschen Gott überhaupt sehen können. Ohne Schwarz können wir Weiß nicht erkennen. Wer solch einen Pakt eingeht, der schaut nicht auf die von Dir erwähnten Nebensächlichkeiten.

:smiley-twist:  :smiley-twist:  :smiley-twist:

Grundsätzlich stimme ich Dir aber durchaus zu. Allerdings würde ich die Vermittlung an den TO eher an das Ende des Themas verlagern. Aber wenn Du es jetzt für besser hältst, laß Dich bitte nicht aufhalten.
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: Aceli on Apr 22, 2019, 06:45 pm
Nabend.   Vielen Dank @agmue.
dein Sketch ausschnitt ohne setAll und SetPixel funktioniert..dennoch schaue ich mir mal an wieso weshalb.
mir ist nur eben aufgefallen das sie noch ab und an flackern aber die korrekte Verkabelung folgt und wird dann nochmal alles getestet.


eine Einschätzung wäre noch super. im Case 0 ist ja die Knight Rider Funktion.
Diese lässt die LEDS ja quasi hart nachrücken. Kann man den vorhanden Sketch im Case 0 noch so umschreiben das quasi die 1 und 3 Led gedämmt wird. quasi ein weichen Übergang machen?

oder sollte ich dann nach einen ganz anderen Sketch suchen weil dieser das nicht vorsieht?
Title: Re: Wieviel LEDs sind für ein Lauflicht möglich ?
Post by: postmaster-ino on Apr 22, 2019, 07:11 pm
Hi

Mittlerweile müsstest Du doch halbwegs mitbekommen haben, wie die WS2812B angesteuert werden.
Wenn Dir der Ablauf in case '0' nicht zusagt - ändere Ihn.
Wenn Du zwei/drei/zwölf Dimmstufen dazwischen haben möchtest, dann packe Die dazwischen.

MfG