From 08983247025697848579b35ef693d0b44904f728 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 8 Feb 2023 14:28:51 +0100 Subject: Add numeric representation of adc points --- src/app.c | 80 ++++++++++++++++++++++++++++----------------------------------- 1 file changed, 36 insertions(+), 44 deletions(-) (limited to 'src/app.c') diff --git a/src/app.c b/src/app.c index 667ce32..013025c 100644 --- a/src/app.c +++ b/src/app.c @@ -182,7 +182,7 @@ void print_number(u8 n, u16 r, u16 g, u16 b, u8 x, u8 y) { u16 number = font_numbers[n]; for (u8 row = 0; row < 5; row++) { - u8 pos = 11 + 10 * (7 - x + y * 8) - row * 10; + u8 pos = 11 + 10 * (7 - y) - row * 10 + x; u16 cur = number >> (13 - 3 * row); for (u8 i = 0; i < 3; i++) { if ((cur >> (2 - i)) & 0x1) { @@ -192,51 +192,43 @@ print_number(u8 n, u16 r, u16 g, u16 b, u8 x, u8 y) { } } +u16 frame = 0; +u16 value = 0; + +void +update(void) { + for (int i = 0; i < PAD_COUNT; ++i) { + // Get the first detected button value. + u16 x = (99 * g_ADC[i]) >> 12; + if (x > 3) { + value = x; + return; + } + } + value = 0; +} + +void +clear_pads(void) { + for (int i = 0; i < PAD_COUNT; ++i) { + hal_plot_led(TYPEPAD, ADC_MAP[i], 0, 0, 0); + } +} + +void +render(void) { + if (frame++ == 1000 / 10) { + clear_pads(); + print_number((value / 10) % 10, MAXLED, MAXLED, MAXLED, 0, 0); + print_number( value % 10, MAXLED, MAXLED, MAXLED, 4, 0); + frame = 0; + } +} + void app_timer_event() { - // example - send MIDI clock at 125bpm -// #define TICK_MS 20 - -// static u8 ms = TICK_MS; - -// if (++ms >= TICK_MS) -// { -// ms = 0; - -// // send a clock pulse up the USB -// hal_send_midi(USBSTANDALONE, MIDITIMINGCLOCK, 0, 0); -// } - - // alternative example - show raw ADC data as LEDs - // for (int i = 0; i < PAD_COUNT; ++i) { - // // raw adc values are 12 bit, but LEDs are 6 bit. - // // Let's saturate into r;g;b for a rainbow effect to show pressure - // u16 r = 0; - // u16 g = 0; - // u16 b = 0; - - // u16 x = (3 * MAXLED * g_ADC[i]) >> 12; - - // if (x < MAXLED) { - // r = x; - // } else if (x >= MAXLED && x < (2*MAXLED)) { - // r = 2 * MAXLED - x; - // g = x - MAXLED; - // } - // else { - // g = 3 * MAXLED - x; - // b = x - 2*MAXLED; - // } - - // print_number(i, r, g, b, 0, 0); - // break; - // // if (buttons[ADC_MAP[i]] == MAXLED) { - // // hal_plot_led(TYPEPAD, ADC_MAP[i], r, g, b); - // // } else { - // // hal_plot_led(TYPEPAD, ADC_MAP[i], 0, 0, MAXLED); - // // } - // } - print_number(9, MAXLED, MAXLED, MAXLED, 0, 0); + update(); + render(); } void -- cgit v1.2.1