Files
RingClock/Core/Src/ws2812_effect.c
2026-04-03 22:16:43 +02:00

165 lines
3.1 KiB
C

/*
* ws2812_effect.c
*
* Created on: Mar 25, 2026
* Author: ewars
*/
#include "ws2812_drv.h"
#include "ws2812_effect.h"
//#include "clock.h"
#include <stdlib.h>
#include "ds1307.h"
#define NV_COLOUR_HOURS_ADDR 0x08
#define NV_COLOUR_MINUTES_ADDR 0x0B
#define NV_COLOUR_SECONDS_ADDR 0x0E
#define NV_COLOUR_BACKGND_ADDR 0x11
typedef struct {
uint8_t r;
uint8_t g;
uint8_t b;
} colour_s;
static colour_s colour_hours = {250, 0, 0};
static colour_s colour_minutes = {0, 250, 0};
static colour_s colour_seconds = {0, 0, 250};
static colour_s colour_background = {0, 0, 0};
void ws_effect_setDisplayColoursNV(void){
uint8_t rxBuf[3] = {0};
ds1307_read_user_RAM(NV_COLOUR_HOURS_ADDR, rxBuf, 3);
colour_hours.r = rxBuf[0];
colour_hours.g = rxBuf[1];
colour_hours.b = rxBuf[2];
HAL_Delay(5);
ds1307_read_user_RAM(NV_COLOUR_MINUTES_ADDR, rxBuf, 3);
colour_minutes.r = rxBuf[0];
colour_minutes.g = rxBuf[1];
colour_minutes.b = rxBuf[2];
HAL_Delay(5);
ds1307_read_user_RAM(NV_COLOUR_SECONDS_ADDR, rxBuf, 3);
colour_seconds.r = rxBuf[0];
colour_seconds.g = rxBuf[1];
colour_seconds.b = rxBuf[2];
HAL_Delay(5);
ds1307_read_user_RAM(NV_COLOUR_BACKGND_ADDR, rxBuf, 3);
colour_background.r = rxBuf[0];
colour_background.g = rxBuf[1];
colour_background.b = rxBuf[2];
HAL_Delay(5);
}
void clock_setColourHours(uint8_t r, uint8_t g, uint8_t b){
colour_hours.r = r;
colour_hours.g = g;
colour_hours.b = b;
}
void clock_setColourMinutes(uint8_t r, uint8_t g, uint8_t b){
colour_minutes.r = r;
colour_minutes.g = g;
colour_minutes.b = b;
}
void clock_setColourSeconds(uint8_t r, uint8_t g, uint8_t b){
colour_seconds.r = r;
colour_seconds.g = g;
colour_seconds.b = b;
}
void ws_Effect_InitModule(void){
ws_effect_setDisplayColoursNV();
ws2812_Init();
}
void clock_setColourBackground(uint8_t r, uint8_t g, uint8_t b){
colour_background.r = r;
colour_background.g = g;
colour_background.b = b;
}
void ws_Effect_RoudTheClock(void){
uint8_t r = rand();
uint8_t g = rand();
uint8_t b = rand();
for (uint8_t led = 0; led < 24; led++) {
ws2812_reset();
ws2812_set_colour(led, r, g, b);
ws2812_update();
}
}
void ws_Effect_RandRound(void){
uint8_t r = rand();
uint8_t g = rand();
uint8_t b = rand();
for (uint8_t led = 0; led < 24; led++) {
ws2812_set_colour(led, r, g, b);
ws2812_update();
}
}
void ws_effect_display_time(uint8_t hour, uint8_t minute, uint8_t second){
ws2812_reset();
//ws2812_resetColour(colour_background.r, colour_background.g, colour_background.b);
ws2812_update();
ws2812_set_colour(hour, colour_hours.r, colour_hours.g, colour_hours.b);
ws2812_update();
ws2812_set_colour(minute, colour_minutes.r, colour_minutes.g, colour_minutes.b);
ws2812_update();
ws2812_set_colour(second, colour_seconds.r, colour_seconds.g, colour_seconds.b);
ws2812_update();
}
void ws_effect_display_hour(uint8_t hour){
ws2812_reset();
ws2812_set_colour(hour, colour_hours.r, colour_hours.g, colour_hours.b);
}
void ws_Effect_RandRand(void){
uint8_t r = rand();
uint8_t g = rand();
uint8_t b = rand();
uint8_t led = rand();
ws2812_set_colour(led, r, g, b);
ws2812_update();
}