ich hätte eine Frage bezüglich meines Codes: ich wollte die Leds in Gruppen in Form von Bytes anlegen, um die Ansprache einfacher zu gestalten. Momentan habe ich allerdings das Problem, dass Zwar die Leds leuchten, die ich im Byte festgelegt habe, Aber beim Byte 1 leuchtet zusätzlich die LED 0 und Beim Byte 2 die LED 1.
Evtl kann mir jemand den Code korrigieren:
Auch wenn Du vieleicht keine Probleme hast, hast Du den gleichen Fehler bei
for (int t=0; t <= 4; t++){
Das Array hat 4 Elemente Zwei[4] von 0 bis 3
und die Schleife läuft 5 mal durch ( von 0 bis 4). So überschreibst Du die auf die Veriable folgende Speicherstelle.
... oder, um die Array flexibler zu gestalten:
for (byte t=0;t<sizeof(Zwei)/sizeof(Zwei[0]);t++){
Dabei berechnet der Compiler, wie viele Elemente sich in dem Array Zwei[] befinden.
(sizeof gibt den Speicherplatz in Byte des zu Prüfenden Element zurück, SPeicherplatz des gesamten Array durch Speicherplatz eines einzelnen Element ergibt die Anzahl der Elemente)
Wenn Dein Code später noch Mal MEHR machen soll, gewöhne Dir delay() gar nicht erst an, in der IDE gibt's ein Beispiel 'Blink_without_delay' und hier im Forum die 'Nachtwächter-Erklärung' - einen Blick ist Das auf jeden Fall wert.
Dein Sketch ist momentan so gedacht, daß die benannten LEDs auf die entsprechende Farbe schalten und dann 'für immer und ewig' an bleiben?
Wenn JA, dann kannst Du Das auch nur 1x ausführen - wenn sich an den LEDs nichts ändert, musst Du auch keine Daten an die LEDs schicken - somit wären hier die delay() fast schon kein Problem mehr.
... befürchte aber, daß die LEDs später schon noch etwas aktiver werden sollen ... sonst bräuchte man ja auch keine RGB-LEDs
postmaster, das haben uns doch combie und doc gerade eben gezeigt, dass das noch eleganter geht.
Ich probiere mal.
Strip hab ich keinen drann, aber die Serial.Ausgabe schaut gut aus:
#include <Adafruit_NeoPixel.h>
#define PIN 3
Adafruit_NeoPixel strip = Adafruit_NeoPixel(48, PIN, NEO_GRB + NEO_KHZ800);
const byte Eins[3] = {1, 2, 3};
const byte Zwei[4] = {6, 7, 8, 9};
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
Serial.begin(115200);
}
void loop() {
for (auto ¤tLed : Eins) { // for each auf c++ ... gem. https://forum.arduino.cc/index.php?topic=553441.30
Serial.println(currentLed); // currentLed zeigt nun direkt auf den jeweiligen Array-Index
strip.setPixelColor(currentLed, 0, 255, 0);
delay(50);
strip.show();
}
for (byte t = 0; t < 4; t++) {
Serial.print(t); Serial.print(F(": ")); Serial.println (Zwei[t]);
strip.setPixelColor(Zwei[t], 255, 0, 0);
delay(50);
}
strip.show();
}