From 63966da14ab66bf711547f94e4d185f2027ad253 Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Tue, 17 Dec 2019 23:59:05 -0800 Subject: add sound-reactive mode and pattern-cycling interrupt --- eq.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 eq.c (limited to 'eq.c') diff --git a/eq.c b/eq.c new file mode 100644 index 0000000..eb7febd --- /dev/null +++ b/eq.c @@ -0,0 +1,51 @@ +#include "config.h" +#include "eq.h" + +#include +#include + +unsigned char eq_levels[7]; + +static const unsigned char thresholds[][2] = { EQ_THRESHOLDS }; + +static void reset() { + PORTB |= (1 << EQ_PIN_RESET); + PORTB &= ~(1 << EQ_PIN_RESET); + _delay_us(36); +} + +static void strobe() { + PORTB |= (1 << EQ_PIN_STROBE); + _delay_us(36); + PORTB &= ~(1 << EQ_PIN_STROBE); + _delay_us(36); +} + +static unsigned char map_level(unsigned char val, unsigned char min, unsigned char max) { + if (val <= min) + return 0; + else if (val >= max) + return 255; + else + return val * 255 / (max - min); +} + +void eq_read() { + reset(); + + for (int i = 0; i < 7; ++i) { + strobe(); + + ADCSRA |= (1 << ADSC); + while (ADCSRA & (1 << ADSC)); + eq_levels[i] = map_level(ADCH, thresholds[i][0], thresholds[i][1]); + } +} + +void eq_decay() { + reset(); + + for (int i = 0; i < 7; ++i) { + strobe(); + } +} -- cgit v1.2.3-70-g09d2