Da mein Buch erst morgen kommt, habe ich ein bisschen herumprogrammiert. Der Link von Serenfly war schon soweit ganz okay, kann aber ein Buch, welches zum Nachlesen vor dem PC liegt nicht ersetzen 
Jedoch war die Klasse in dem Beispielslink etwas für das einfache Verständnis überladen. Bzw. es wurde nicht genau erklärt. (oder überlesen
)
Der Unterschied zwischen public und private ist mir soweit klar. fadeVal(x,y) muss zum Beispiel nicht öffentlich ausserhalb meiner Funktionen zur Verfügung stehen.
In dem Beispiel aus dem Link werden bestimmte Variablen im private als int x_ deklariert. Wieso _ ist nicht ganz klar geworden. Scheint keine wichtige Rolle zu spielen und dient eher als Wertekopie? Desweiteren hätte ich gedacht, dass man das Beispiel direkt kompilieren kann. Gut das die Fehlermeldung doch klar war (float kann nicht int geschrieben werden ;))
Kann sich wer mal die Struktur anschauen, ob ich da evtl. noch etwas falsch mache und wie läuft das hier nun genau ab. Ich muss der Klasse noch irgendwie mitteilen, die Anzahl der Leds, Array/struct für die Leds. Wie kann ich das anhang der Klasse nun am einfachsten bewerkstellen. Ich hoffe durch den unten zu sehenden Sketch wird ersicht, was ich genau vor habe. Die öffentlichen Funktionen geben ein ==wahr zurück, sobald sich Daten später bei den Leds geändert haben, damit ich an dem Beispiel FastLED.show() nicht immer alles an die Strips schicken muss.
class ledfx{
public:
int numLeds;
// Eine Led an
bool staticOne(int led, int hue, int sat, int val);
// Alle Leds an
bool staticAll(int hue, int sat, int val);
// Fade einer Led
bool fadeOne(int led, int hue, int sat, int val, unsigned long interval);
// Fade aller Leds
bool fadeAll(int hue, int sat, int val, unsigned long interval);
private:
// Interne Funktions zur Berechnung des Fades
int fadeVal(int val, unsigned long interval);
};
bool ledfx::staticOne(int led, int hue, int sat, int val)
{
static int lastLed, lastHue, lastSat, lastVal;
if (led != lastLed ||
hue != lastHue ||
sat != lastSat ||
val != lastVal)
{
lastLed = led;
lastHue = hue;
lastSat = sat;
lastVal = val;
//leds[led].hue = hue;
//leds[led].sat = sat;
//leds[led].val = val;
return true;
}
else
{
return false;
}
}
bool ledfx::staticAll(int hue, int sat, int val)
{
static int lastHue, lastSat, lastVal;
if (hue != lastHue ||
sat != lastSat ||
val != lastVal)
{
lastHue = hue;
lastSat = sat;
lastVal = val;
for (int led = 0; led < numLeds; led++)
{
//leds[led].hue = hue;
//leds[led].sat = sat;
//leds[led].val = val;
}
return true;
}
else
{
return false;
}
}
bool ledfx::fadeOne(int led, int hue, int sat, int val, unsigned long interval)
{
static int lastVal;
int newVal = fadeVal(val, interval);
if (newVal != lastVal)
{
lastVal = newVal;
//leds[led].hue = hue;
//leds[led].sat = hue;
//leds[led].val = hue;
return true;
}
else
{
return false;
}
}
bool ledfx::fadeAll(int hue, int sat, int val, unsigned long interval)
{
static int lastVal;
int newVal = fadeVal(val, interval);
if (newVal != lastVal)
{
lastVal = newVal;
for (int led = 0; led < numLeds; led++)
{
//leds[led].hue = hue;
//leds[led].sat = hue;
//leds[led].val = hue;
}
return true;
}
else
{
return false;
}
}
int ledfx::fadeVal(int val, unsigned long interval)
{
static bool reverse;
unsigned long currentMillis = 0; // = millis();
static unsigned long lastMillis;
if (currentMillis - lastMillis >= interval)
{
lastMillis = currentMillis;
if (val < 255 && !reverse)
{
val++;
}
else if (val >= 255 && !reverse)
{
val--;
reverse = true;
}
else if (val > 0 && reverse)
{
val--;
}
else if (val <= 0 && reverse)
{
val++;
reverse = false;
}
}
return val;
}
// ---------------------------------------------------- //
// ---------------------------------------------------- //
int main(void)
{
ledfx leds;
while (1)
{
bool setLeds = false;
if (leds.fadeOne(0, 160, 255, 85, 100))
{
setLeds = true;
}
if (setLeds)
{
// FastLED.show();
}
}
return 0;
}