Problem mit Neopixeln

hallo,

Ich habe ein Problem mit den Neopixel LED's.
Ich möchte mir gerne mehrere Gruppen erstellen, so dass ich also quasi drei Stück ansteuern kann. das erstellen von den dreien war auch gar nicht schwer, größtenteils copy-paste, doch nun habe ich eine unter-Routine, der ich gerne übergeben möchte, welches Objekt sie jetzt ansprechen soll.
Wie muss ich das umsetzten?
ich hatte es schon mit einem String versucht, jedoch ohne erfolg...

Vielen Dank schon mal im Vorraus!

problem 1.JPG

problem 2.JPG

Wow

Also Fehlermeldungen von 200 Byte in BILDER zu packen mit mehreren zehn K-Byte ... ich bin begeistert!

Im Normalfall wäre für TEXT wohl die Text-Form angebracht.
Nebenbei wäre Dein Sketch (ebenfalls als Text, aber in Code-Tags) wünschenswert.

MfG

ok, muss auch sagen, dass dies meine erste Erfahrung mit einem Forum ist...
Aber ich werde mich bemühen.

wie man sehen kann, möchte ich mehrere selbstgebaute 7-Segment anzeigen steuern. Dafür nutze ich ws2812b Led's an einem Arduino Uno.

Btw, wie heißt eigentlich das, was bei mir jetzt z.B. zahl_sekunde heißt? Also wie bezeichnet an das fachsprachlich? -Dann könnte ich mir evtl. dazu auch selber noch was raussuchen...

#include <Adafruit_NeoPixel.h>
/*         4
        -------
       |        | 5
     3 |        |
        ---6----
       |        | 0
     2 |        |
        --------
           1 */

#define NUMPIXELS 7
Adafruit_NeoPixel Zahl_sekunde(NUMPIXELS, 6, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel Zahl_minute(NUMPIXELS, 7, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel Zahl_stunde(NUMPIXELS, 8, NEO_GRB + NEO_KHZ800);

void setup() {
  pixel.begin();
}

void loop() {
  for (byte i = 0; i <= 9; i++) {
    zahlAnzeigen(Zahl_sekunde, i, 0, 0, 255);
    delay(1000);}
    //zahlAnzeigen(Zahl_sekunde, 5, 0, 255,0);


  }

  void zahlAnzeigen(String pixel, byte zahl, byte r, byte g, byte b) {
    pixel.clear();
    switch (zahl) {
      case 0: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(2, r, g, b);
        pixel.setPixelColor(3, r, g, b);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(6, 0, 0, 0);
        break;

      case 1: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(1, 0, 0, 0);
        pixel.setPixelColor(2, 0, 0, 0);
        pixel.setPixelColor(3, 0, 0, 0);
        pixel.setPixelColor(4, 0, 0, 0);
        pixel.setPixelColor(6, 0, 0, 0);
        break;

      case 2: pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(2, r, g, b);
        pixel.setPixelColor(3, 0, 0, 0);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(6, r, g, b);
        break;

      case 3: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(2, 0, 0, 0);
        pixel.setPixelColor(3, 0, 0, 0);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(6, r, g, b);
        break;

      case 4: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, 0, 0, 0);
        pixel.setPixelColor(2, 0, 0, 0);
        pixel.setPixelColor(3, r, g, b);
        pixel.setPixelColor(4, 0, 0, 0);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(6, r, g, b);
        break;

      case 5: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(2, 0, 0, 0);
        pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(3, r, g, b);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, 0, 0, 0);
        pixel.setPixelColor(6, r, g, b);
        break;

      case 6: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(2, r, g, b);
        pixel.setPixelColor(3, r, g, b);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, 0, 0, 0);
        pixel.setPixelColor(6, r, g, b);
        break;

      case 7: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, 0, 0, 0);
        pixel.setPixelColor(2, 0, 0, 0);
        pixel.setPixelColor(3, 0, 0, 0);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(6, 0, 0, 0);
        break;

      case 8: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(2, r, g, b);
        pixel.setPixelColor(3, r, g, b);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(6, r, g, b);
        break;

      case 9: pixel.setPixelColor(0, r, g, b);
        pixel.setPixelColor(1, r, g, b);
        pixel.setPixelColor(6, r, g, b);
        pixel.setPixelColor(3, r, g, b);
        pixel.setPixelColor(4, r, g, b);
        pixel.setPixelColor(5, r, g, b);
        pixel.setPixelColor(2, 0, 0, 0);
        break;
    }
    pixel.show();
  }

Hi

Adafruit_NeoPixel Zahl_sekunde(NUMPIXELS, 6, NEO_GRB + NEO_KHZ800);
--> Zahl_sekunde.begin();
--> Zahl_sekunde.setPixelColor(1, r, g, b);
--> Zahl_sekunde.show();

Du könntest Deine Funktion so abändern:
void zahlAnzeigen(Adafruit_NeoPixel * pixel, byte zahl, byte r, byte g, byte b) {
...

Dann sollte im Sketch was in der Art
zahlAnzeigen(Zahl_sekunde,3,12,55,133);
klappen können.

DAS wirft mit Sicherheit Fehler!
Hier sind aber durchaus ein/zwei klügere Köpfe unterwegs, Die meine Idee zerreißen, oder flicken können :slight_smile:

MfG

20Alexanderxx:
Btw, wie heißt eigentlich das, was bei mir jetzt z.B. zahl_sekunde heißt? Also wie bezeichnet an das fachsprachlich? -Dann könnte ich mir evtl. dazu auch selber noch was raussuchen...

Damit niemand scrollen muss, hier die Zeile, auf die ich mich beziehe:

Adafruit_NeoPixel Zahl_sekunde(NUMPIXELS, 6, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel
ist der Name einer Klasse. Eine Klasse ist sozusagen die Vorlage oder der Bauplan für ein Software-Objekt. Kurz: Man kann Variablen und Code, der damit arbeitet, zu einem Gebilde zusammenfügen. Die Idee dahinter ist, Dinge der realen Welt besser beschreiben zu können.

Zahl_sekunde
ist der Name einer Instanz (eines Exemplars/Objekts) dieser Klasse.

Was dann in Klammern kommt, sind die Parameter, die man bei der Erzeugung der Instanz angeben muss, z. B. damit Variablen der Klasse mit Werten belegt werden können.

Ich hoffe, Du siehst jetzt klarer :slight_smile:

Gruß

Gregor

PS: Ich sehe gerade, dass Wikipedia unter „Methode“ wohl lediglich „Verhaltensweisen“ versteht. Wenn ich aber eine Kaffeemaschine als Klasse abbilden würde, würde ich kaffee_machen(JETZT), wo z.B. auch beschrieben/programmiert ist, dass man zur Spüle gehen muss, um Wasser zu holen. Dabei „verhält“ sich die Kaffeemaschine aber nicht.
Würdet Ihr sowas anderswo unterbringen?

Nicht alles, was in Wikipedia steht, ist richtig bzw. vollständig.

Gruß Tommy

Tommy56:
Nicht alles, was in Wikipedia steht, ist richtig bzw. vollständig.

Ja, klar. Aber wie siehst Du das? Würdest Du so eine Methode anderswo unterbringen?

Dass sich die Qualität der Artikel bei der Wikipedia quasi im freien Fall befindet, wundert mich nicht. Auf mich machen immer mehr Artikel den Eindruck, dass sie von ziemlich uninteressierten und lustlosen Leuten geschrieben wurden. Auch falsche Belege sind mir mittlerweile untergekommen (wo z.B. das, was sie belegen sollen, gar nicht drin steht).

Gruß

Gregor

Die "Funktionen" innerhalb einer Klasse heißen Methoden. Diese Bezeichnung hat sich eigentlich über alle(?) OO-Sprachen durchgesetzt.

Was man in die Methoden rein programmiert, obliegt erst mal dem Realisierer.

Einige allgemeingültige(re) Ansichten haben sich bei der Benennung heraus gebildet:

setIrgendwas(Wert), um interne Werte, evtl. mit Prüfungen zu setzen
Typ getIrgendwas() interne Werte zurückgeben
bool isIrgendwas() Getter auf boolsche Werte

Im Arduinobereich sind Methoden wie init()/begin() für Initialisierungen, die erst später erfolgen dürfen eingebürgert und run() als Methode im loop().

Das sind aber alles keine Gesetze, die Verwendung solcher Sachen fördert aber ungemein die Verständigung zwischen Beteiligten.

Gruß Tommy

Vielen Dank für die Hilfen, hat mir sehr geholfen und habe dabei sogar noch was gelernt :wink: