35 #include "avr_helper.h" 37 #include <util/crc16.h> 39 #include <avr/interrupt.h> 58 static void init_rand(
void){
59 uint8_t *ptr = (
void*)RAMSTART;
62 for(uint16_t i=0; i < RAMEND; i++){
63 seed = _crc16_update(seed, *ptr++);
68 #define DELTA_10MS 20000 70 static volatile uint8_t done_wait;
72 ISR(TIMER1_COMPA_vect){
73 OCR1A = TCNT1 + DELTA_10MS;
104 static void synchronize(
void){
117 typedef struct ave_t{
128 static uint8_t average(ave_t *ave, uint8_t v){
131 ave->buf[ave->cur++] = v;
132 if(ave->cur >= AVE) ave->cur = 0;
134 for(uint8_t i=0; i<AVE; i++)
141 static float bassFilter(
float sample) {
142 static float xv[3] = {0,0,0}, yv[3] = {0,0,0};
143 xv[0] = xv[1]; xv[1] = xv[2];
144 xv[2] = sample / 9.1f;
145 yv[0] = yv[1]; yv[1] = yv[2];
146 yv[2] = (xv[2] - xv[0])
147 + (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);
157 static void beat_detect(
signal_t *s){
158 static uint8_t old=0;
164 if(
new < -10) trigger = 0;
167 s->
beat = !old && trigger;
174 static uint32_t sum_harmonics(
signal_t *s, uint8_t from, uint8_t to){
176 for(; from <= to; from++){
182 static uint32_t get_band_power(
signal_t *s, uint16_t band){
186 for(uint16_t f=1; f; f <<= 1, i++){
187 result += band & f ? s->
harmonics[i] : 0;
192 static void prepare_samples(
signal_t *s){
235 prepare_samples(&music);
#define DEBUG_LED_PORT
Символ порта индикации текущего состояния (отладка)
void do_control(signal_t *s)
Обработка органов управления
signal_t music
Параметры мелодии
void sample_and_fft(void)
Захват семплов и обработка методом FFT.
volume_t average_vol
средняя громкость
power_t band[BAND_CNT]
"мощности" полос сигнала
структура конфигурации устройства
uint16_t get_result_fft(uint8_t index)
получение запрошенной гармоники FFT.
Постоянная составляющая (инфранизкие частоты)
структура параметров звукового сигнала
void fade(void)
Автоматическое изменение яркости всех пикселов
uint16_t harmonics[F_CNT]
амплитуды всех гармоник сигнала
сервисный модуль для реализации эффектов Набор вспомогательных функций для базовых манипуляций над це...
void ws2812_show(void)
обновление ленты светододов
Описания для модуля реализации спектрального анализа
void reset_power_timeout(void)
сброс таймаута автоотключения питания
uint8_t power_timeout(signal_t *s)
проверка таймаута автовыключения питания
#define BAND_FULL
битовые маски частот спектра, учитываемые при расчете уровня сигнала (все, кроме DC) ...
Общее количество гармоник
volume_t peak_volume
пиковая громкость
void power_off(void)
выключение питания
Интерфейс визуальных эффектов
описания урганов управления
uint8_t beat
детектор ритма
INIT(7)
инициализация периферии
void execute_effect(signal_t *s)
Рендеринг эффекта
аппаратные особенности подключения WS2812.