Problem mit der selbst erstellten Klasse

Hallo,

ich hätte da mal ein Problem und zwar will ich mit den Arduino Nano RGB LEDs mit WS2812 Chip steuern. Um das Programm kurz zu halten habe ich mir eine Klasse mit der entsprechende Funktion erstellt. Der Compiler selber erkennt bei den Code keinen Fehler und so lässt sich der Code auch ohne Problem auf den Arduino drauf spielen, doch leider passiert denn nichts. Mein alternativer Code ohne Klasse mit derselben Pin-Belegung funktioniert ohne Problem.

Ich hatte vorher auch schon Problem wo ich erst das Array erstellt habe und anschließend befüllen wollte, deshalb ist das als Kommentar ausgegraut.

Wenn einer hier eine Idee hätte wo der Fehler liegt, würde ich mich freuen, da es mir hierbei das Problem an sich geht.

Ich sage schon mal danke und wünsche euch allen hier ein schönes Restwochenende.

Mfg

#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 7

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

class farbe
{
private:
int a;
int b;
int c;

public:
farbe (int aa, int bb, int cc) : a(aa), b(bb), c(cc) {}

void setfarbe ( )
{

pixels.begin();
pixels.setPixelColor(0,pixels.Color (a, b, c));
pixels.setPixelColor(1,pixels.Color (a, b, c));
pixels.setPixelColor(2,pixels.Color (a, b, c));
pixels.setPixelColor(3,pixels.Color (a, b, c));
pixels.setPixelColor(4,pixels.Color (a, b, c));
pixels.setPixelColor(5,pixels.Color (a, b, c));
pixels.setPixelColor(6,pixels.Color (a, b, c));
pixels.show();

}

};

void setup() {

int time = 3000;

farbe a[3] = {{255, 0, 0}, {255,165, 0}, {255,255, 0} };

/*
farbe a[7];
a[0] = (255, 0, 0);
a[1] = (255,165, 0);
a[2] = (255,255, 0);
a[3] = (127,255, 0);
a[4] = ( 0,191,255);
a[5] = ( 75, 0,130);
a[6] = (238,130,238);
*/

for (int i = 0; i++ ; i < 7)
{

a*.setfarbe ();*

  • delay (time);*

  • }*
    }
    void loop() {

  • // put your main code here, to run repeatedly:*
    }
    [/td]
    [/tr]
    [/table]

Setze Deinen Code bitte in Codetags (</> oben links im Editor).

Ich kann hier keine Klassendefinition sehen.

Gruß Tommy

#include <Adafruit_NeoPixel.h>
#define PIN         6
#define NUMPIXELS   7

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

class farbe {
    byte a;
    byte b;
    byte c;
  public:
    farbe (byte aa, byte bb, byte cc) : a(aa), b(bb), c(cc) {}
    void setfarbe() {
      pixels.begin();
      for (byte i = 0; i < 7; i++) {
        pixels.setPixelColor(i, a, b, c);
      }
      pixels.show();
    }
};

void setup() {
  int time = 3000;
  farbe a[3] = {{255,  0,  0}, {255, 165,  0}, {255, 255,  0} };
  for (byte i = 0; i < 3; i++) {
    a[i].setfarbe();
    delay (time);
  }
}
void loop() {}

Vorsicht mit for-Schleifen und Arrays. Du kannst nicht ein Array aus 3 Elementen haben und bis 7 iterieren. Besser man verwendet eine Konstante und berechnet die Länge des Arrays aus dessen Größe. Oder gleich C++11 "range based for loops". Dann passiert das nicht

Hallo,

erst mal viel Dank für eure schnelle Hilfe, echt Klasse.

Den eigentlichen Fehler habe ich nun gefunden, das war der for-Schleifenkopf.

Aber warum verwendest du Wandall byte statt int als Datentyp?

Wünsche euch noch einen schönen Sonntagabend.

Mfg

Das macht er, um RAM zu sparen. Ein int ist 2 Byte lang.

Gruß Tommy