DIGILIGHT
skystar.c
См. документацию.
1 
11 #include <avr/io.h>
12 #include "../avr_helper.h"
13 #include <stdlib.h>
14 #include <avr/eeprom.h>
15 #include "../color_transform.h"
16 #include "../global.h"
17 #include "../pixel.h"
18 #include "../main_effect.h"
19 
21 #define DEF_EFFECK_BK_LIGHT_CNT 5
22 
23 static __flash const char _name[] = "SKY STAR";
24 typedef struct{
25  uint8_t speed;
26  uint8_t count;
27  uint8_t mask_fade;
28 } preset_t;
29 
30 #define PRESET_CNT 3
31 
32 static int8_t preset_id;
33 static __flash const preset_t preset[PRESET_CNT] = {
34  {.speed = 100, .count = 5, .mask_fade = 0x0F},
35  {.speed = 5, .count = 10, .mask_fade = 0x1F},
36  {.speed = 50, .count = 10, .mask_fade = 0x3F}
37 };
44 static void effect(signal_t *s){
45  static uint8_t sil_cnt=1;
46 
47  rgb_t rgb;
48  hsv_t hsv;
49 
50  // замедление темпа рисования
51  if(--sil_cnt) return;
52  sil_cnt = preset[preset_id].speed;
53 
54  hsv.h = rand() % HSV_GRADE;
55  hsv.s = hsv.v = 255;
56  hsv_to_rgb(&hsv, &rgb);
57 
58  // вывод в случайном месте пиксела со случайным цветом
59  if(get_light_cnt() < preset[preset_id].count)//DEF_EFFECK_BK_LIGHT_CNT)
60  rnd_pix_rgb(rgb.r, rgb.g, rgb.b, - (1+(rand() & preset[preset_id].mask_fade)));
61 }
62 
63 static preset_result_t _preset(int8_t d){
64  preset_id += d;
65  if(preset_id < 0) preset_id = PRESET_CNT-1;
66  if(preset_id >= PRESET_CNT) preset_id = 0;
67  return preset_id+1;
68 }
69 
70 static void _save(void);
71 
72 static flash_effect_t effect_def = {
73  .name = _name,
74  .start = NULL,
75  .work = effect,
76  .stop = NULL,
77  .preset = _preset,
78  .save = _save
79 };
80 
81 static EEMEM uint8_t e_preset;
82 
83 INIT(7){
84  // загрузить пресеты и настройки
85  preset_id = eeprom_read_byte(&e_preset);
86  _preset(0);
87  // регистрация эффекта
88  register_effect(BACKGROUND_EFFECT, &effect_def);
89 }
90 
91 static void _save(void){
92  // сохранить настройки
93  eeprom_update_byte(&e_preset, preset_id);
94 }
95 
const __flash effect_t flash_effect_t
тип описания эффекта, размещенного во FLASH.
Definition: main_effect.h:79
структура параметров звукового сигнала
Definition: global.h:72
uint16_t h
Оттенок цвета, значения в градусах 0...359.
uint8_t v
Яркость оттенка
uint8_t s
Насыщенность оттенка
#define BACKGROUND_EFFECT
фоновый эффект
Definition: main_effect.h:48
preset_result_t
результат функции смены пресета
Definition: main_effect.h:56
Тип для представления цвета в HSV-модели
Тип для представления цвета в RGB-модели
void hsv_to_rgb(hsv_t *src, rgb_t *dst)
структура пресета
Definition: dbl_rainbow.c:41
void register_effect(uint8_t toe, flash_effect_t *eff)
Регистрация эффекта в списках
Definition: main_effect.c:41
uint8_t get_light_cnt(void)
Подсчет светящихся пикселов
Definition: pixel.c:78