diff options
author | Bad Diode <bd@badd10de.dev> | 2023-02-08 14:28:51 +0100 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-02-08 14:29:26 +0100 |
commit | 08983247025697848579b35ef693d0b44904f728 (patch) | |
tree | f48c91d7ad68fef4262622b6ead7b106202e2bbf /src/app.c | |
parent | a1c96114819dc8eb59b2a5152cb2ccff408402d4 (diff) | |
download | launchpad-polymaker-08983247025697848579b35ef693d0b44904f728.tar.gz launchpad-polymaker-08983247025697848579b35ef693d0b44904f728.zip |
Add numeric representation of adc points
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 80 |
1 files changed, 36 insertions, 44 deletions
@@ -182,7 +182,7 @@ void | |||
182 | print_number(u8 n, u16 r, u16 g, u16 b, u8 x, u8 y) { | 182 | print_number(u8 n, u16 r, u16 g, u16 b, u8 x, u8 y) { |
183 | u16 number = font_numbers[n]; | 183 | u16 number = font_numbers[n]; |
184 | for (u8 row = 0; row < 5; row++) { | 184 | for (u8 row = 0; row < 5; row++) { |
185 | u8 pos = 11 + 10 * (7 - x + y * 8) - row * 10; | 185 | u8 pos = 11 + 10 * (7 - y) - row * 10 + x; |
186 | u16 cur = number >> (13 - 3 * row); | 186 | u16 cur = number >> (13 - 3 * row); |
187 | for (u8 i = 0; i < 3; i++) { | 187 | for (u8 i = 0; i < 3; i++) { |
188 | if ((cur >> (2 - i)) & 0x1) { | 188 | if ((cur >> (2 - i)) & 0x1) { |
@@ -192,51 +192,43 @@ print_number(u8 n, u16 r, u16 g, u16 b, u8 x, u8 y) { | |||
192 | } | 192 | } |
193 | } | 193 | } |
194 | 194 | ||
195 | u16 frame = 0; | ||
196 | u16 value = 0; | ||
197 | |||
198 | void | ||
199 | update(void) { | ||
200 | for (int i = 0; i < PAD_COUNT; ++i) { | ||
201 | // Get the first detected button value. | ||
202 | u16 x = (99 * g_ADC[i]) >> 12; | ||
203 | if (x > 3) { | ||
204 | value = x; | ||
205 | return; | ||
206 | } | ||
207 | } | ||
208 | value = 0; | ||
209 | } | ||
210 | |||
211 | void | ||
212 | clear_pads(void) { | ||
213 | for (int i = 0; i < PAD_COUNT; ++i) { | ||
214 | hal_plot_led(TYPEPAD, ADC_MAP[i], 0, 0, 0); | ||
215 | } | ||
216 | } | ||
217 | |||
218 | void | ||
219 | render(void) { | ||
220 | if (frame++ == 1000 / 10) { | ||
221 | clear_pads(); | ||
222 | print_number((value / 10) % 10, MAXLED, MAXLED, MAXLED, 0, 0); | ||
223 | print_number( value % 10, MAXLED, MAXLED, MAXLED, 4, 0); | ||
224 | frame = 0; | ||
225 | } | ||
226 | } | ||
227 | |||
195 | void | 228 | void |
196 | app_timer_event() { | 229 | app_timer_event() { |
197 | // example - send MIDI clock at 125bpm | 230 | update(); |
198 | // #define TICK_MS 20 | 231 | render(); |
199 | |||
200 | // static u8 ms = TICK_MS; | ||
201 | |||
202 | // if (++ms >= TICK_MS) | ||
203 | // { | ||
204 | // ms = 0; | ||
205 | |||
206 | // // send a clock pulse up the USB | ||
207 | // hal_send_midi(USBSTANDALONE, MIDITIMINGCLOCK, 0, 0); | ||
208 | // } | ||
209 | |||
210 | // alternative example - show raw ADC data as LEDs | ||
211 | // for (int i = 0; i < PAD_COUNT; ++i) { | ||
212 | // // raw adc values are 12 bit, but LEDs are 6 bit. | ||
213 | // // Let's saturate into r;g;b for a rainbow effect to show pressure | ||
214 | // u16 r = 0; | ||
215 | // u16 g = 0; | ||
216 | // u16 b = 0; | ||
217 | |||
218 | // u16 x = (3 * MAXLED * g_ADC[i]) >> 12; | ||
219 | |||
220 | // if (x < MAXLED) { | ||
221 | // r = x; | ||
222 | // } else if (x >= MAXLED && x < (2*MAXLED)) { | ||
223 | // r = 2 * MAXLED - x; | ||
224 | // g = x - MAXLED; | ||
225 | // } | ||
226 | // else { | ||
227 | // g = 3 * MAXLED - x; | ||
228 | // b = x - 2*MAXLED; | ||
229 | // } | ||
230 | |||
231 | // print_number(i, r, g, b, 0, 0); | ||
232 | // break; | ||
233 | // // if (buttons[ADC_MAP[i]] == MAXLED) { | ||
234 | // // hal_plot_led(TYPEPAD, ADC_MAP[i], r, g, b); | ||
235 | // // } else { | ||
236 | // // hal_plot_led(TYPEPAD, ADC_MAP[i], 0, 0, MAXLED); | ||
237 | // // } | ||
238 | // } | ||
239 | print_number(9, MAXLED, MAXLED, MAXLED, 0, 0); | ||
240 | } | 232 | } |
241 | 233 | ||
242 | void | 234 | void |