205 lines
7.7 KiB
C++
205 lines
7.7 KiB
C++
#ifndef _LED_ANIMATION_H
|
|
#define _LED_ANIMATION_H
|
|
|
|
#include "common/LEDStrip.h"
|
|
#include "led_strip.h"
|
|
#include "my_board.h"
|
|
#include <functional>
|
|
#include "common/HSVTable.h"
|
|
|
|
#define HUE_MAX 767
|
|
|
|
enum EXIT_TYPE { EXIT_NORMAL, EXIT_FROM_NOTIFY, EXIT_FINISHED, EXIT_TIMEOUT };
|
|
|
|
|
|
#define HUE_CALC_METHOD 0
|
|
// TODO Fix hue range... 0-359 or 0-360;
|
|
#if HUE_CALC_METHOD == 0
|
|
#define HUEtoRGB(x) trueHSV(x)
|
|
#elif HUE_CALC_METHOD == 1
|
|
#define HUEtoRGB(x) sineHSV(x)
|
|
#elif HUE_CALC_METHOD == 2
|
|
#define HUEtoRGB(x) pwrHSV(x)
|
|
#endif
|
|
|
|
#define RGBtoHUE(x) RGBToHSV(x)
|
|
|
|
#define INFINITE_LOOP 0
|
|
|
|
|
|
enum DIR_TYPE { DT_REV, DT_FWD, DT_BOTH };
|
|
|
|
typedef struct {
|
|
int RampUpTime;
|
|
int msRampDownTime;
|
|
int msHoldTime;
|
|
int msFreq;
|
|
float minDuty;
|
|
float maxDuty;
|
|
int interval;
|
|
uint8_t pwr;
|
|
}params_whiteFill;
|
|
|
|
typedef struct {
|
|
int hue;
|
|
int cooling;
|
|
int sparking;
|
|
int interval;
|
|
uint8_t pwr;
|
|
}params_fire_hue;
|
|
|
|
typedef struct {
|
|
rgbpixel_t col1;
|
|
rgbpixel_t col2;
|
|
uint8_t range; /* hue range 0-127*/
|
|
int density;
|
|
uint8_t step; /* range step inteval*/
|
|
int interval;
|
|
uint8_t pwr;
|
|
}params_rain;
|
|
|
|
#define ANIMTESTMODE_TIMEOUT (20 * 1000) // 20 secs
|
|
|
|
typedef struct {
|
|
int EventTestCountdown = 0;
|
|
int EventsIndex; // upto 8 events based on anim-events.json
|
|
int EventsCount; // upto 8 events based on anim-events.json
|
|
int PopupAnimIndex;
|
|
bool busy;
|
|
bool repeat;
|
|
int countStatus;
|
|
}ANIM_STATUS;
|
|
|
|
typedef struct {
|
|
bool busy;
|
|
int dslrCountStatus;
|
|
}WHITE_FILL_STATUS;
|
|
|
|
extern ANIM_STATUS animStatus;
|
|
extern WHITE_FILL_STATUS whiteStatus;
|
|
|
|
float calculateSteps(int msFreq, float LEDCount, int msFillTime);
|
|
void GetOptimizedStepInterval(float &steps, int &interval, int LEDCount, int msFillTime, int startInterval, float tolerance);
|
|
|
|
float GetNextPalletHue(void);
|
|
void Init_Hue_Range_Pallet(float hue1, float hue2, int colSteps);
|
|
|
|
float GetHueRange(float hue1, float hue2);
|
|
float GetHueRangeWeb(float hue1, float hue2);
|
|
|
|
int CalcEventInterval(float speed, int min, int max);
|
|
|
|
/******************************** ANIMATION LOOP HELPER *********************************
|
|
* All Animations should use this lopp helper.
|
|
* Logic for monitoring exit notifications
|
|
* Timeout in mSec can be set to exit
|
|
**************************************************************************************/
|
|
EXIT_TYPE Animation_Loop(ANIM_STATUS &stateMon, int msFreq, TickType_t duration, std::function<int()> callback=NULL);
|
|
|
|
// min:0-100, max:0-100
|
|
//int Const_White_Fill(WHITE_FILL_STATUS &status, int msRampUpTime, int msHoldTime, int msRampDownTime, int msFreq, float minDuty, float maxDuty);
|
|
int Const_White_Fill(WHITE_FILL_STATUS &status, FRONT_LIGHT light , float delayFactor, int countDown, int msFreq);
|
|
//int Const_White_Fill_HelioType(ANIM_STATUS &stateMon, float startPoint, int msRampUpTime, int msRampDownTime, int msHoldTime, int msFreq, float minDuty, float maxDuty);
|
|
|
|
EXIT_TYPE Animation_White_Fill_Mirrored(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
|
|
EXIT_TYPE Animation_Linear_Brighten(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
EXIT_TYPE Animation_Tick_Fill(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
|
|
|
|
/******************************** COLORED SNAKES *********************************
|
|
* cycles=0=infinite
|
|
* (check1) "mix"=false, all appearing sectors will be the same color until the next iteration
|
|
* "mix"=true, each meteor color will be different
|
|
* (check2) "roate", add rotation to animation
|
|
* (hue range) hue range (0-360)
|
|
* (param1) sectors
|
|
* (param2) colorCount, number of color divisions
|
|
**************************************************************************************/
|
|
EXIT_TYPE Animation_Snakes(LEDSTRIP& strip, ANIMATION_EVENT& event, DIR_TYPE dir=DT_BOTH, int cycles=0);
|
|
void drawSnakeMix(LEDSTRIP& strip, int sectors, float hue1, float hue2, int colorCount);
|
|
|
|
|
|
/******************************** COLORED COMETS *********************************
|
|
*(check1) "mix"=false, all appearing comets will be the same color until the next iteration
|
|
* (check2) "mix"=true, each comets color will be different
|
|
* (param1) hue range (0-360)
|
|
* (param2) colorCount, number of color divisions
|
|
**************************************************************************************/
|
|
EXIT_TYPE Animation_Comets(LEDSTRIP& strip, ANIMATION_EVENT& event, DIR_TYPE dir=DT_BOTH, int cycles=0);
|
|
|
|
void fadeToBlackBy(rgbpixel_t& pixel, uint8_t fadeAmount);
|
|
inline uint8_t nscale8(uint8_t i, uint8_t scale);
|
|
|
|
/******************************** COLORED SECTORS *********************************
|
|
* (check1) "mix"=false, all appearing sectors will be the same color until the next iteration
|
|
* (check2) "mix"=true, each meteor color will be different
|
|
* (param1) hue range (0-360)
|
|
* (param2) colorCount, number of color divisions
|
|
**************************************************************************************/
|
|
EXIT_TYPE Animation_Sectors(LEDSTRIP& strip, ANIMATION_EVENT& event, DIR_TYPE dir=DT_BOTH, int cycles=0);
|
|
|
|
|
|
/******************************** COLORED DASHES *********************************
|
|
* (check1) "mix"=false, all appearing dashes will be the same color until the next iteration
|
|
* (check2) "mix"=true, each dash color will be different
|
|
* (param1) hue range (0-360)
|
|
* (param2) colorCount, number of color divisions
|
|
**************************************************************************************/
|
|
EXIT_TYPE Animation_Dashes(LEDSTRIP& strip, ANIMATION_EVENT& event, DIR_TYPE dirType=DT_BOTH, int cycles=0);
|
|
|
|
|
|
/******************************** HUE SPECTRUM *********************************
|
|
* (check1) "mix"=false, all appearing dashes will be the same color until the next iteration
|
|
* (check2) "mix"=true, each dash color will be different
|
|
* (param1) hue range (0-360)
|
|
* (param2) colorCount, number of color divisions
|
|
**************************************************************************************/
|
|
EXIT_TYPE Animation_Hue_Spectrum(LEDSTRIP& strip, ANIMATION_EVENT& event, TickType_t duration);
|
|
EXIT_TYPE Animation_Hue_Spectrum_Mirrored(LEDSTRIP& strip, ANIMATION_EVENT& event, TickType_t duration);
|
|
void Fill_Hue_Spectrum(LEDSTRIP& strip, float hue1, float hue2);
|
|
void Fill_Hue_Spectrum_Mirrored(LEDSTRIP& strip, float hue1, float hue2);
|
|
|
|
|
|
/************************ RAINBOW *********************/
|
|
EXIT_TYPE Animation_Rainbow(LEDSTRIP& strip, ANIMATION_EVENT& event, TickType_t duration);
|
|
|
|
/************************ PULSE COLOR *********************/
|
|
EXIT_TYPE Animation_Pulse_Color_Cycling(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
|
|
|
|
/**************** FIRE ****************/
|
|
enum FIRE_COLOR { RED_FIRE, GREEN_FIRE, BLUE_FIRE};
|
|
//void Animation_Fire(LEDSTRIP& strip, ANIMATION_EVENT& event, FIRE_COLOR fire, TickType_t duration);
|
|
EXIT_TYPE Animation_Fire(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
void LEDStrip_FireInit(LEDSTRIP& strip);
|
|
void Fire_Update( LEDSTRIP& strip, FIRE_COLOR fire, int Cooling, int Sparking);
|
|
rgbpixel_t GetPixelHeatColor ( FIRE_COLOR fire, uint8_t temperature);
|
|
|
|
|
|
|
|
|
|
/************************ *********************/
|
|
void Animation_Splash(LEDSTRIP& strip);
|
|
void Animation_SparkleColor(LEDSTRIP& strip, int msFreq);
|
|
void Animation_SparkleHue(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
|
|
EXIT_TYPE Animation_Serial_Test2(LEDSTRIP& strip, int msFreq, const char* s1, const char* s2);
|
|
// msTransTime(Duration), msFreq(update interval)
|
|
void Animation_TransTo_Color(LEDSTRIP& strip, ANIM_STATUS &stateMon, int msTransTime, int msFreq, rgbpixel_t col);
|
|
|
|
|
|
void drawSectorsHueSingle(LEDSTRIP& strip, rgbpixel_t col, float hue1, float hue2, int sectors) ;
|
|
void drawSectorsHueMix(LEDSTRIP& strip, float hue1, float hue2, int sectors, int colorCount);
|
|
|
|
|
|
|
|
/************************ TEST ANIMATIONS *********************/
|
|
EXIT_TYPE Animation_SetPixel(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
EXIT_TYPE Animation_Clear(LEDSTRIP& strip, ANIMATION_EVENT& event);
|
|
|
|
|
|
rgbpixel_t GetColorFromHue(int hue);
|
|
|
|
|
|
#endif |