Fork of the espurna firmware for `mhsw` switches
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.
 
 
 
 
 
 

76 lines
2.4 KiB

/*
Part of the GARLAND MODULE
Copyright (C) 2020 by Dmitry Blinov <dblinov76 at gmail dot com>
Inspired by https://github.com/Vasil-Pahomov/ArWs2812 (currently https://github.com/Vasil-Pahomov/Liana)
*/
#pragma once
#include "color.h"
#define BRA_AMP_SHIFT 1 // brigthness animation amplitude shift. true BrA amplitude is calculated
// as (0..127) value shifted right by this amount
#define BRA_OFFSET 127 //(222-64) // brigthness animation amplitude offset
class Palette;
class Anim {
public:
Anim(const char* name);
const char* name() { return _name; }
void Setup(Palette* palette, uint16_t numLeds, Color* leds, Color* _ledstmp, byte* seq);
virtual bool finishedycle() const { return true; };
virtual void Run() = 0;
virtual void setCycleFactor(float new_cycle_factor) { cycleFactor = new_cycle_factor; }
virtual float getCycleFactor() { return cycleFactor; }
protected:
uint16_t numLeds = 0;
Palette* palette = nullptr;
Color* leds = nullptr;
Color* ledstmp = nullptr;
byte* seq = nullptr;
int phase;
int pos;
int inc;
//brigthness animation (BrA) current initial phase
byte braPhase;
//braPhase change speed
byte braPhaseSpd = 5;
//BrA frequency (spatial)
byte braFreq = 150;
Color curColor = Color(0);
Color prevColor = Color(0);
const Color sparkleColor = Color(0xFFFFFF);
// Reversed analog of speed. To control speed for particular animation (fine tuning for one).
// Lower - faster. Set cycleFactor < 1 speed up animation, while cycleFactor > 1 slow it down.
float cycleFactor = 1.0;
virtual void SetupImpl() = 0;
// helper functions for animations
void initSeq();
void shuffleSeq();
//glow animation setup
void glowSetUp();
//glow animation - must be called for each LED after it's BASIC color is set
//note this overwrites the LED color, so the glow assumes that color will be stored elsewhere (not in leds[])
//or computed each time regardless previous leds[] value
void glowForEachLed(int i);
//glow animation - must be called at the end of each animaton run
void glowRun();
private:
const char* _name;
};
unsigned int rng();
byte rngb();