21 #include "../avr_helper.h" 23 #include <avr/eeprom.h> 24 #include "../color_transform.h" 25 #include "../global.h" 27 #include "../main_effect.h" 34 static void _stop(
void);
35 static void _start(
void);
36 static void _save(
void);
40 static __flash
const char _name[] =
"SPARKLER";
51 #define LIGHT_LIVE_CNT 10 64 light_t lights[LIGHT_LIVE_CNT];
65 uint16_t prev_peak[
F_CNT];
68 static static_parameter_t par;
70 static static_parameter_t *param=∥
80 static uint8_t get_speed(uint16_t ha){
81 uint8_t result = MIN_SPEED;
92 for(uint8_t i=0; i<LIGHT_LIVE_CNT; i++){
94 if(param->lights[i].live){
102 if(!--param->lights[i].div){
104 param->lights[i].div = param->lights[i].speed;
107 param->lights[i].live--;
111 param->lights[i].live = 0;
115 if(param->lights[i].live == 0) param->live--;
122 delta = s->
harmonics[param->h] - param->prev_peak[param->h];
124 param->prev_peak[param->h] = s->
harmonics[param->h];
127 for(n=0; n<LIGHT_LIVE_CNT; n++){
128 if(param->lights[n].live == 0){
130 param->lights[n].speed = get_speed(s->
harmonics[param->h] / 10);
131 param->lights[n].speed++;
132 param->lights[n].live = rand() %
PIXEL_CNT;
133 param->lights[n].color_id = param->h-1;
134 param->lights[n].div = param->lights[n].speed;
135 param->lights[n].pix = 0;
136 if(param->lights[n].live) param->live++;
142 if(param->prev_peak[param->h] >= 5) param->prev_peak[param->h] -= 5;
145 if(param->h >=
F_CNT) param->h = 1;
146 if(param->prev_peak[param->h] >= 5) param->prev_peak[param->h] >>= 1;
151 for(uint8_t i=0; i<LIGHT_LIVE_CNT; i++){
152 if(param->lights[i].live){
153 set_fix_color(param->lights[i].pix, param->lights[i].color_id);
161 static void _start(
void){
162 memset(param, 0,
sizeof(static_parameter_t));
void bright_ctrl(uint8_t id, uint8_t bright, int8_t delta)
Управление яркостью
void off_all_pixels(void)
Выключение всех пикселов
const __flash effect_t flash_effect_t
тип описания эффекта, размещенного во FLASH.
структура параметров звукового сигнала
uint16_t harmonics[F_CNT]
амплитуды всех гармоник сигнала
preset_result_t
результат функции смены пресета
#define PIXEL_CNT
Общее количество пикселов
#define FOREGROUND_EFFECT
основной эффект
Общее количество гармоник
pixel_t pixels[MAX_TOTAL_PIX]
Массив пикселей предельного размера
void register_effect(uint8_t toe, flash_effect_t *eff)
Регистрация эффекта в списках
void set_fix_color(uint8_t pos, uint8_t fix_cid)
Пиксел одного из фиксированных цветов
uint8_t bright
яркость пиксела