Hallo,
ich habe mich mal ein wenig schlau gelesen und einige Sketche studiert.
Das ist schon eine nicht einfache Geschichte.
Ich habe die Beispiele aus der Lib "Apa102" und aus der Lib "FastLED" mal
versucht zu verstehen- und mich beschleicht hier ein böses Gefühl…
Wie steuert man denn eine einzelne LED an? Ist das überhaupt möglich?
Ein Beispiel dafür habe ich nicht finden können.
Ich habe ein Band mit 10 LED´s. Nun soll nur die dritte zu 75% leuchten.
Gleiches Band, nur die dritte (75%) und die siebte (50%) soll leuchten.
Hat da mal jemand ein Beispiel für?
Ist es überhaupt möglich die Leuchstärke für jede LED einzeln zu setzen?
Also 10-Band, Leuchstärke (10, 25, 50, 70, 30, 5, 80, 10, 35, 15)
Gruß und Dank
Andreas
klar ist das möglich, aber es sind mehr werte, weil Du ja eigentlich 30 LEDs hast.
es gibt ein array, in dem Du die werte füe jede LED setzen kannst, mit show wird das dann rausgeschossen. wenn Du den wert für eine einzelne LED im array nicht änderst, wird eben der unveränderte wert wieder rausgeschickt.
gruß stefan
EDIT: ich nehme mal an, Du hast RGB-LEDs.
Das array ist ein zweidimensionales, also ein array[3] für jede RGB-LED in einem array, das so groß ist, wie Du RGB-LEDs hast.
bei FastLED gibt es das beispiel Blink, da wird nur eine LED verändert. die variablen RED und BLACK sind vordefinierte werte. RED (255, 0, 0). BLACK (0, 0, 0).
von der FastLED wird automatisch ein array CRGB[3] typisiert (nicht erstellt, nur als "variablentyp" definiert).
wenn Du jetzt ein solches array erstellst, mit:
CRGB eineLED;
könntest Du sagen:
eineLED = (255, 255, 0);
eine einzelne LED macht natürlich wenig sinn, deshalb erstellt man ein array aus CRGBs mit
CRGB leds[NUM_LEDS];
wobei NUM_LEDS die anzahl Deiner RGB-LEDs ist. das array hat (bei 10) dann 10 RGB-LEDs mit je einem CRGB für drei farben. braucht also 30 byte. und ja, die anzahl der möglichen LEDs ist durch die speichergröße (RAM) beschränkt.
für die erste LED schreibst Du dann:
leds[0] = (255, 134, 56);
für die fünfte
leds[4] = (0, 234, 67); usw.
rausgeschrieben wird dann für alle LEDs auf einmal mit show().
Hallo Stefan,
das ist ja mal ne´ Hausnummer…
Da kann ich richtig was mit anfangen, dann ist das überhaupt kein Hexenwerk.
Ist im Grunde also ganz "einfach".
Dann wird leds[4] = (0, 234, 67); das erste mal geschrieben und alle LED´s
machen was.
Dann wird leds[4] = (0, 100, 67); das zweite mal geschrieben und alle LED´s
machen was- und NUR LED 5 macht jetzt etwas anderes.
Ha!!
Danke schön! Ein Fettes!
Gruß und Spaß
Andreas
Dir auch viel spaß und frag' bei unklarheiten einfach nach.
bei den WS2812 zwischen arduino und DATA einen 100er widerstand nicht vergessen, sonst ist die erste LED bald tot.
falls Du noch welche kaufst: APA sind besser und schneller zu kontrollieren und manche sagen, die farben sind schöner. aber weil sie neuer sind, halt auch teurer.
Hallo,
wie hole ich mir denn einen "FarbWert" mit lcd.print(FarbWert) auf das
Display zurück?
FastLED kann HTMLColorCode. Wenn ich jetzt eine Farbe setze:
leds = CRGB::WhiteSmoke; Dann leuchtet die LED in der selben. Hier ist der "FarbWert" jetzt "WhiteSmoke" Jetzt möchte ich mit lcd.print(FarbWert) dieses "WhiteSmoke" ausgeben, aber für "Farbwert" finde ich keinen Ausdruck. Für RGB gibt es z.B. etwas: lcd.print(leds[0].r) Gruß und Dank Andreas
Grundsätzlich repräsentiert ein CRGB einen 24 Bit Farbwert (8 Bit pro Grundfarbe).
Die Sache mit der Farbtabelle ermöglicht es einem, einfach "WhiteSmoke" zu schreiben, wenn man eigentlich 0xF5F5F5 meint.
Wenn Du den Inhalt eines CRGBs "interpretieren" (also Zahlen in Worte übersetzen) möchtest, musst Du dass selbst schreiben, z.B. wenn die 3 RGB Werte identisch sind, ist es ein grau. Je kleiner, desto dunkler/schwarz. Je höher, umso heller/weiß.
Hallo Helmuth,
das ist mir schon klar.
Mit dem Syntax "leds[0] = CRGB::Red;" oder leds[0] = CRGB (255, 0, 0) setze
ich die Farbe der LED auf "Rot"
Mit dem Syntax "leds[0].r oder leds[0].g oder leds[0].b" kann ich den Wert
abfragen.
Also mit dem Syntax ".r oder .g oder .b" wird mir der RGB-Wert zurück gegeben.
lcd.print(leds[0].r)
lcd.print(leds[0].g)
lcd.print(leds[0].b)
gibt auf dem Display:
255
0
0
Es ist ja gut möglich , das es einen Syntax ".x" gibt, der "Red" zurück gibt.
Gruß und Dank
Andreas
RED ist ja ein variablenname, und ich wüßte nicht, wie man einen variablennamen in ein print bekommt. und eine tabelle anzulegen, mit der man vergleicht, naja...
und eine tabelle anzulegen, mit der man vergleicht, naja...
ist natürlich nicht schön, aber mir fällt nix anderes ein.
Immer noch einfacher, als eine Analyse des Mischungsverhältnisses, wo dann z.B. sowas wie "bright blueish desaturated cyan" raukommen würde, wenn viel blau, weniger grün und ein bisschen rot drin wäre...
Hallo,
"Wenn Du 3 mal leds[0].r ausgibst, sollte 3 mal der gleiche Wert"
Jaa, habe ich geändert.
"variablennamen in ein print bekommt"
Da gibt es mit Sicherheit etwas, ich bin aber noch nicht dahinter…
Die Namen sind ja in der Lib hinterlegt.
"WhiteSmoke" ist für mich ja kein Variablename, es ist ein Wert- dem ich einer
Variable (x) zuteile.
Ist x = WhiteSmoke, dann leuchte in WhiteSmoke
Ist x = WhiteSmole, dann leuchte nicht, gib Fehler aus
dann müßte möglich sein-
welchen Wert hat x ? Gib mir x zurück
denke ich mir so… hätte ja sein können.
Gruß und Dank
Andreas
ist natürlich nicht schön, aber mir fällt nix anderes ein.
mir ja auch nicht. war keine kritik, ich hab', wie ich das geschrieben habe, Deinen post noch garnicht gelesen.
"WhiteSmoke" ist für mich ja kein Variablename, es ist ein Wert- dem ich einer
Variable (x) zuteile.
Ist x = WhiteSmoke, dann leuchte in WhiteSmoke
Ist x = WhiteSmole, dann leuchte nicht, gib Fehler aus
dann müßte möglich sein-
welchen Wert hat x ? Gib mir x zurück
WhiteSmoke IST kein wert, sondern eine variable mit dem namen WhiteSmoke und sie HAT den wert 0x654321.
diesen wert kannst Du Dir auch ausgeben lassen. mit print(CRGB::WhiteSmoke); liefert er Dir den wert 0x654321.
mit leds[0] = CRGB::WhiteSmoke; bekommt das CRGB leds[0] den wert vom CRBG WhiteSmoke. einfacheres beispiel:
a = 5;
b = 7;
c = 5;
d = a;
dann ist d nicht a, sondern 5, und Du wirst aus d nicht rausbekommen, daß es a ist. das geht nur mit vergleichen, im obigen fall könnte es aber auch
d = c;
gewesen sein, das wirst Du nie wieder rauskriegen...
WhiteSmoke IST kein wert, sondern eine variable mit dem namen WhiteSmoke und sie HAT den wert 0x654321.
Ich würde eher sagen, es ist eine Konstante.
(ohne in die Lib gesehen zu haben)
Aber auch wie bei Variablen geht die Auflösung nur in eine Richtung:
Über den Bezeichner kommt man zum Wert.
Aber nicht anders rum.
Vom Wert gibts keinen Weg zum Bezeichner.
klar, da hast Du schon recht. aber bei mir kommt der ausdruck variable aus der mathematik ins hirn. und bei:
c = a + b
sind a, b, und c klarerweise variable. wenn man dann aber gesagt hat a = 5, hat man nicht plötzlich von konstanten gesprochen, sondern "die variable a ist 5".
drum sind "bei mir" konstanten nur sonderfälle von variablen.
wenn Du zwei leuten sagst: ein quadrat ist ein parallelogramm, wird einer sagen "klar" und der andere "blödsinn"...
Hallo,
ich habe mich noch einmal "schlau gelesen"…
Die Farben sind in einem "enum" hinterlegt. Also keine "Struktur"-
wohl nicht ran zu kommen.
Gruß und Dank
Andreas