#ifndef LEDMATRIX_H #define LEDMATRIX_H #ifndef FASTLED_INTERNAL #define FASTLED_INTERNAL #endif #include #include #include #include "wordclock_constants.h" #include "udp_logger.h" #define DEFAULT_CURRENT_LIMIT 9999 extern const uint32_t colors_24bit[NUM_COLORS]; class LEDMatrix { public: LEDMatrix(FastLED_NeoMatrix *matrix, uint8_t brightness, UDPLogger *logger); static uint16_t color_24_to_16bit(uint32_t color24bit); static uint32_t color_24bit(uint8_t r, uint8_t g, uint8_t b); static uint32_t interpolate_color_24bit(uint32_t color1, uint32_t color2, float factor); static uint32_t wheel(uint8_t WheelPos); uint16_t get_fps(void); void draw_on_matrix_instant(); void draw_on_matrix_smooth(float factor); void flush(void); void grid_add_pixel(uint8_t x, uint8_t y, uint32_t color); void print_char(uint8_t xpos, uint8_t ypos, char character, uint32_t color); void print_number(uint8_t xpos, uint8_t ypos, uint8_t number, uint32_t color); void set_brightness(uint8_t mybrightness); void set_current_limit(uint16_t new_current_limit); void set_min_indicator(uint8_t pattern, uint32_t color); void setup_matrix(); private: FastLED_NeoMatrix *_neomatrix; UDPLogger *_logger; uint8_t _brightness; uint16_t _current_limit; // target representation of matrix as 2D array uint32_t _target_grid[MATRIX_HEIGHT][MATRIX_WIDTH]; // current representation of matrix as 2D array uint32_t _current_grid[MATRIX_HEIGHT][MATRIX_WIDTH]; // target representation of minutes indicator LEDs uint32_t _target_minute_indicators[4] = {0, 0, 0, 0}; // current representation of minutes indicator LEDs uint32_t _current_minute_indicators[4] = {0, 0, 0, 0}; void _draw_on_matrix(float factor); uint16_t _calc_estimated_led_current(uint32_t color); }; #endif /* LEDMATRIX_H */