Mirror of espurna firmware for wireless switches and more
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

53 lines
1.4 KiB

#if GARLAND_SUPPORT
#include "../anim.h"
#include "../color.h"
#include "../palette.h"
//seq keeps phases: 0..127 increasing, 128..255 decreasing, ends at 255 (steady off)
//ledstmp keeps color of stars
//------------------------------------------------------------------------------
class AnimStars : public Anim {
public:
AnimStars() : Anim("Stars") {
}
void SetupImpl() override {
//inc is (average) interval between appearance of new stars
inc = secureRandom(2, 5);
//reset all phases
for (auto i = 0; i < numLeds; ++i)
seq[i] = 255;
}
void Run() override {
for (auto i = 0; i < numLeds; i++) {
byte phi = seq[i];
if (phi < 254) {
Color col = ledstmp[i];
if (phi <= 127) {
leds[i] = col.brightness(phi << 1);
} else {
leds[i] = col.brightness((255 - phi) << 1);
}
seq[i] += 2;
} else {
leds[i].r = 0;
leds[i].g = 0;
leds[i].b = 0;
}
}
if (secureRandom(inc) == 0) {
byte pos = secureRandom(numLeds);
if (seq[pos] > 250) {
seq[pos] = 0;
ledstmp[pos] = palette->getRndInterpColor();
}
}
}
};
#endif // GARLAND_SUPPORT