DIGILIGHT
lamp.c
См. документацию.
1 
14 #include <avr/io.h>
15 #include "../avr_helper.h"
16 #include <stdlib.h>
17 #include <avr/eeprom.h>
18 #include "../hardware.h"
19 #include "../color_transform.h"
20 #include "../global.h"
21 #include "../pixel.h"
22 #include "../main_effect.h"
23 #include "../lcd_show.h"
24 
28 static __flash const char _name[] = "LAMP";
29 
30 static int16_t color;
31 
32 static void work(signal_t *s){
33  hsv_t hsv;
34  rgb_t rgb;
35 
36  hsv.h = color;
37  hsv.v = 255;
38  hsv.s = 255;
39 
40  hsv_to_rgb(&hsv, &rgb);
41 
42  for(uint8_t i=0; i<PIXEL_CNT; i++){
43  bright_ctrl(i, 255, 0);
44  set_rgb_color(i, rgb.r, rgb.g, rgb.b);
45  }
46 }
47 
48 static void _stop(void){
49  lock_input = 0;
50 }
51 
52 static void _start(void){
53  lock_input = 1;
54 }
55 
56 static preset_result_t _preset(int8_t d){
57  color += d;
58  if(color >= HSV_GRADE) color = 0;
59  if(color < 0) color = HSV_GRADE-1;
60  //return color;
61  return 1;
62 }
63 
64 #define hex_nibble(x) ((x) >= 0x0A) ? (((x)-0x0A)+'A') : ((x)+'0')
65 
66 static effect_info_t _info(uint8_t show){
67  if(show){
68  hsv_t hsv;
69  rgb_t rgb;
70 
71  hsv.h = color;
72  hsv.v = 255;
73  hsv.s = 255;
74 
75  hsv_to_rgb(&hsv, &rgb);
76 
77  char tmp[17] = "COLOR:";
78  tmp[6] = hex_nibble(rgb.r >> 4);
79  tmp[7] = hex_nibble(rgb.r & 0x0F);
80  tmp[8] = hex_nibble(rgb.g >> 4);
81  tmp[9] = hex_nibble(rgb.g & 0x0F);
82  tmp[10] = hex_nibble(rgb.b >> 4);
83  tmp[11] = hex_nibble(rgb.b & 0x0F);
84  tmp[12] = 0;
85 
86  center_str(1, tmp);
87  }
88  return INFO_ALWAYS;
89 }
90 
91 static void _save(void);
92 
93 static flash_effect_t effect_def = {
94  .name = _name,
95  .start = _start,
96  .work = work,
97  .stop = _stop,
98  .preset = _preset,
99  .save = _save,
100  .info = _info
101 };
102 
103 static EEMEM uint16_t e_color;
104 INIT(7){
105  // загрузить пресеты и настройки
106  color = eeprom_read_word(&e_color);
107  if(color >= HSV_GRADE) color = rand() % HSV_GRADE;
108 
109  _preset(0);
110  // регистрация эффекта
111  register_effect(BACKGROUND_EFFECT, &effect_def);
112 }
113 
114 static void _save(void){
115  // сохранить настройки
116  eeprom_update_word(&e_color, color);
117 }
118 
void bright_ctrl(uint8_t id, uint8_t bright, int8_t delta)
Управление яркостью
Definition: pixel.c:95
void center_str(uint8_t row, char *src)
вывод строки по центру дисплея
Definition: lcd_show.c:123
uint8_t lock_input
Definition: main.c:220
void set_rgb_color(uint8_t pos, uint8_t r, uint8_t g, uint8_t b)
Пиксел произвольного цвета
Definition: pixel.c:107
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
#define PIXEL_CNT
Общее количество пикселов
Definition: pixel.h:27
Тип для представления цвета в HSV-модели
Тип для представления цвета в RGB-модели
void hsv_to_rgb(hsv_t *src, rgb_t *dst)
void register_effect(uint8_t toe, flash_effect_t *eff)
Регистрация эффекта в списках
Definition: main_effect.c:41