#include <FastLED.h>
constexpr uint8_t DATA_PIN {16};
constexpr unsigned int NUM_LEDS {16};
CRGB leds[NUM_LEDS];
class Scenario { // Interface
public:
virtual int tuwas() { return 0; }
};
class ScRandom : public Scenario {
private:
unsigned long delay_milli;
unsigned long last_millis {0};
public:
ScRandom(unsigned long dm) : delay_milli {dm} {}
virtual int tuwas() override {
unsigned long m = millis();
if ((m - last_millis) < delay_milli) { return 0; }
Serial.println("In ScRandom");
last_millis = m;
for (size_t i = 0; i < NUM_LEDS; ++i) { leds[i] = CRGB(random8(), random8(), random8()); }
FastLED.show();
return 1;
}
};
class ScPrint : public Scenario {
private:
Print& output;
public:
ScPrint(Print& stream) : output {stream} {}
virtual int tuwas() override {
output.print("In ScPrint: Ich tu was...");
output.println("aber nicht leuchten");
return 0;
}
};
Scenario* scenarios[] {new ScRandom {200}, new ScPrint {Serial}};
void setup() {
Serial.begin(115200);
FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(255);
FastLED.clear();
}
void loop() {
if (scenarios[0]->tuwas()) {
scenarios[1]->tuwas();
}
}