#pragma once #ifndef ATM_FADE_WS2812_H_ #define ATM_FADE_WS2812_H_ #include #include "FastLED.h" class Atm_fade_WS2812 : public Machine { public: enum { IDLE, ON, START, STARTU, UP, STARTD, DOWN, REPEAT, DONE, OSTARTU, OUP, OSTARTD, ODOWN }; enum { EVT_CNT_FADE, EVT_TM_FADE, EVT_TM_ON, EVT_TM_OFF, EVT_CNT_RPT, EVT_ON, EVT_OFF, EVT_BLINK, EVT_TOGGLE, EVT_TOGGLE_BLINK, ELSE }; enum { EVT_START = EVT_BLINK }; Atm_fade_WS2812( CRGB *_leds, int _num_leds, int _offset_leds) ; ~Atm_fade_WS2812 (void) ; Atm_fade_WS2812& begin(); Atm_fade_WS2812& trace( Stream& stream ); Atm_fade_WS2812& blink( uint32_t duration, uint32_t pause_duration, uint16_t repeat_count = ATM_COUNTER_OFF ); Atm_fade_WS2812& blink( uint32_t duration ); Atm_fade_WS2812& blink( void ); Atm_fade_WS2812& pause( uint32_t duration ); Atm_fade_WS2812& fade( int fade_length); Atm_fade_WS2812& fade( int fade_length, bool fade_light, int fade_chase); Atm_fade_WS2812& fadeSpeed( float fade_speed); Atm_fade_WS2812& fadeSpeed( float fade_speed, bool fade_light, int fade_chase); Atm_fade_WS2812& repeat( uint16_t repeat ); Atm_fade_WS2812& on( void ); Atm_fade_WS2812& off( void ); Atm_fade_WS2812& toggle( void ); Atm_fade_WS2812& toggleBlink( void ); Atm_fade_WS2812& start( void ); Atm_fade_WS2812& onFinish( Machine& machine, int event = 0 ); Atm_fade_WS2812& onFinish( atm_cb_push_t callback, int idx = 0 ); Atm_fade_WS2812& setColor(int hue, int sat, int val); Atm_fade_WS2812& setColor(CHSV hsvColor); Atm_fade_WS2812& setColor(CRGB rgbColor); Atm_fade_WS2812& replaceValues(bool replace); // if true replace the array, else just add values Atm_fade_WS2812& updateRate(int new_update_rate); // change update rate Atm_fade_WS2812& update(); Atm_fade_WS2812& reversed(bool _reverse); private: //destination array CRGB * leds ; int num_leds ; int offset_leds ; //buffer array CRGB * leds_buffer ; CHSV color ; bool reverse = false ; int FADE_STEPS = 254 ; uint32_t fade_duration ; //last led to update unsigned long fade_start_millis ; uint32_t fade_ellapsed_millis ; uint32_t fade_update_rate = 22 ; bool _fade_light = true ; bool _fade_chase = 0 ; void update_leds(float fade_value) ; bool _replace_array = true ; bool update_flag = true; // for synchronised update enum { ENT_REPEAT, ENT_OFF, ENT_ON, ENT_UP, ENT_DOWN, ENT_START, ENT_DONE }; // short pin; uint16_t repeat_count; atm_connector onfinish; atm_timer_millis timer_fade, timer_on, timer_off, timer_update; atm_counter counter_fade, counter_repeat; int event( int id ); void action( int id ); protected: // virtual void initLED(); // virtual void switchOn(); // virtual void switchOff(); // virtual void setBrightness(int value); }; #endif