Major refactoring of EEPROM r/w. Add dynamic brightness functionality.
This commit is contained in:
@@ -29,7 +29,7 @@ class NTPClientPlus
|
||||
public:
|
||||
NTPClientPlus(UDP &udp, const char *pool_server_name, int utcx, bool sw_change);
|
||||
bool is_leap_year(unsigned int year);
|
||||
bool update_sw_change();
|
||||
bool check_daylight_saving_time();
|
||||
int get_hours_12() const;
|
||||
int get_hours_24() const;
|
||||
int get_minutes() const;
|
||||
|
||||
@@ -10,34 +10,29 @@
|
||||
#define NTP_SERVER_URL "de.pool.ntp.org" // NTP server address
|
||||
#define HOSTNAME (String("wordclock")) // Local hostname
|
||||
#define LOGGER_MULTICAST_IP (IPAddress(230, 120, 10, 2)) // IP for UDP server
|
||||
#define LOGGER_MULTICAST_PORT 8123 // Port for UDP server
|
||||
#define HTTP_PORT 80 // Standard HTTP port
|
||||
#define LOGGER_MULTICAST_PORT (8123) // Port for UDP server
|
||||
#define HTTP_PORT (80) // Standard HTTP port
|
||||
|
||||
// EEPROM layout
|
||||
typedef enum
|
||||
{
|
||||
ADR_NM_START_H = 0,
|
||||
ADR_NM_END_H = 4,
|
||||
ADR_NM_START_M = 8,
|
||||
ADR_NM_END_M = 12,
|
||||
ADR_BRIGHTNESS = 16,
|
||||
ADR_MC_RED = 20,
|
||||
ADR_MC_GREEN = 22,
|
||||
ADR_MC_BLUE = 24,
|
||||
EEPROM_SIZE = 30
|
||||
} EepromLayout_en;
|
||||
// ESP8266 Pins
|
||||
#define NEOPIXEL_PIN (14) // pin to which the NeoPixels are attached
|
||||
#define BUTTON_PIN (5) // pin to which the button is attached
|
||||
|
||||
#define NEOPIXEL_PIN 14 // pin to which the NeoPixels are attached
|
||||
#define BUTTON_PIN 5 // pin to which the button is attached
|
||||
// Time limits
|
||||
#define HOUR_MAX (23)
|
||||
#define MINUTE_MAX (59)
|
||||
|
||||
#define MINUTES_IN_HOUR (60)
|
||||
#define HOURS_IN_DAY (24)
|
||||
|
||||
// Night mode
|
||||
#define NIGHTMODE_START_HR 23
|
||||
#define NIGHTMODE_START_MIN 0
|
||||
#define NIGHTMODE_END_HR 7
|
||||
#define NIGHTMODE_END_MIN 0
|
||||
#define NIGHTMODE_START_HR (23)
|
||||
#define NIGHTMODE_START_MIN (0)
|
||||
#define NIGHTMODE_END_HR (7)
|
||||
#define NIGHTMODE_END_MIN (0)
|
||||
|
||||
// Timings in us
|
||||
#define PERIOD_ANIMATION_US (200 * 1000) // 200ms
|
||||
#define PERIOD_CLOCK_UPDATE_US (1 * 1000 * 1000) // 1s
|
||||
#define PERIOD_HEARTBEAT_US (1 * 1000 * 1000) // 1s
|
||||
#define PERIOD_MATRIX_UPDATE_US (100 * 1000) // 100ms
|
||||
#define PERIOD_NIGHTMODE_CHECK_US (20 * 1000 * 1000) // 20s
|
||||
@@ -46,7 +41,6 @@ typedef enum
|
||||
#define PERIOD_SNAKE_US (50 * 1000) // 50ms
|
||||
#define PERIOD_STATE_CHANGE_US (10 * 1000 * 1000) // 10s
|
||||
#define PERIOD_TETRIS_US (50 * 1000) // 50ms
|
||||
#define PERIOD_TIME_VISU_UPDATE_US (1 * 1000 * 1000) // 1s
|
||||
#define TIMEOUT_LEDDIRECT_US (5 * 1000 * 1000) // 5s
|
||||
|
||||
#define SHORT_PRESS_US (100 * 1000) // 100ms
|
||||
@@ -54,16 +48,21 @@ typedef enum
|
||||
#define VERY_LONG_PRESS_US (10 * 1000 * 1000) // 10s
|
||||
|
||||
// Current limit
|
||||
#define CURRENT_LIMIT_LED 2500 // limit the total current consumed by LEDs (mA)
|
||||
#define CURRENT_LIMIT_LED (2500) // limit the total current consumed by LEDs (mA)
|
||||
|
||||
// Brightness ranges range: 0 - 255
|
||||
#define DEFAULT_BRIGHTNESS (40)
|
||||
#define MIN_BRIGHTNESS (10)
|
||||
#define MAX_BRIGHTNESS UINT8_MAX
|
||||
|
||||
// LED smoothing
|
||||
#define DEFAULT_SMOOTHING_FACTOR 0.5
|
||||
#define DEFAULT_SMOOTHING_FACTOR (0.5f)
|
||||
|
||||
// Number of colors in colors array
|
||||
#define NUM_COLORS 7
|
||||
#define NUM_COLORS (7)
|
||||
|
||||
// LED matrix size
|
||||
#define MATRIX_WIDTH 11
|
||||
#define MATRIX_HEIGHT 11
|
||||
#define MATRIX_WIDTH (11)
|
||||
#define MATRIX_HEIGHT (11)
|
||||
|
||||
#endif /* WORDCLOCK_CONSTANTS_H */
|
||||
|
||||
@@ -6,9 +6,10 @@
|
||||
#include "led_matrix.h"
|
||||
#include "udp_logger.h"
|
||||
|
||||
extern UDPLogger logger;
|
||||
extern LEDMatrix led_matrix;
|
||||
extern ESP8266WebServer webserver;
|
||||
#define RANGE_LIMIT(X, MIN, MAX) (((X) < (MIN)) ? (MIN) : (((X) > (MAX)) ? (MAX) : (X)))
|
||||
#define RANGE_LIMIT_SUB(X, MIN, MAX, SUB) (((X) < (MIN)) ? (SUB) : (((X) > (MAX)) ? (SUB) : (X)))
|
||||
|
||||
#define EEPROM_SIZE (sizeof(EepromLayout_st) / sizeof(uint8_t))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -18,6 +19,29 @@ typedef struct
|
||||
int end_min;
|
||||
} NightModeTimes_st;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t red;
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
uint8_t alpha;
|
||||
} Color_st;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t static_brightness; // user-controlled static brightness of LEDs
|
||||
uint8_t dyn_brightness_min; // user-controlled min brightness of LEDs
|
||||
uint8_t dyn_brightness_max; // user-controlled max brightness of LEDs
|
||||
bool flg_dynamic_brightness; // flag if user wants to use daytime dynamic brightness
|
||||
} Brightness_st;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
NightModeTimes_st night_mode_times;
|
||||
Brightness_st brightness_values;
|
||||
Color_st color_values;
|
||||
} EepromLayout_st;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ST_CLOCK,
|
||||
@@ -30,25 +54,28 @@ typedef enum
|
||||
NUM_STATES
|
||||
} ClockState_en;
|
||||
|
||||
int EEPROM_read_address(int address);
|
||||
String leading_zero2digit(int value);
|
||||
uint8_t calculate_dynamic_brightness(uint8_t min_brightness, uint8_t max_brightness, int hours, int minutes, bool summertime);
|
||||
uint8_t update_brightness(void);
|
||||
void check_night_mode(void);
|
||||
void check_wifi_status(void);
|
||||
void EEPROM_write_to_address(int address, int value);
|
||||
void draw_main_color(void);
|
||||
void handle_button(void);
|
||||
void handle_command(void);
|
||||
void handle_current_state(void);
|
||||
void handle_data_request(void);
|
||||
void handle_led_direct(void);
|
||||
void load_main_color(void);
|
||||
void limit_value_ranges(void);
|
||||
void ntp_time_update(uint32 *last_ntp_update_us);
|
||||
void on_state_entry(uint8_t state);
|
||||
void read_settings_from_EEPROM(void);
|
||||
void reset_wifi_credentials(void);
|
||||
void send_heartbeat(void);
|
||||
void set_dynamic_brightness(bool state);
|
||||
void set_main_color(uint8_t red, uint8_t green, uint8_t blue);
|
||||
void set_night_mode(bool on);
|
||||
void state_change(uint8_t newState);
|
||||
void update_matrix(void);
|
||||
void update_state_machine(void);
|
||||
void write_settings_to_EEPROM(void);
|
||||
|
||||
#endif /* WORDCLOCK_ESP8266_H */
|
||||
|
||||
Reference in New Issue
Block a user