From 5036188e6a942ca2f46c4974b9584447d279ea9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Thu, 12 May 2016 02:23:43 +0200 Subject: [PATCH] added bounce effect --- project/display.c | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/project/display.c b/project/display.c index d0ae1d3..c45b092 100644 --- a/project/display.c +++ b/project/display.c @@ -7,27 +7,53 @@ #define PIXEL_COUNT 30 +#define WAVEGRID_DEPTH 5 +#define WAVEGRID_LEN PIXEL_COUNT*WAVEGRID_DEPTH +static float wavegrid[WAVEGRID_LEN]; + +#define WAVE_DISSIPATION 0.011f + + static ws2812_rgb_t pixels[PIXEL_COUNT] = {}; static MeanBuf *mb; void display_show(void) { + for (int i = 0; i < PIXEL_COUNT; i++) { + + // 0 1 2 3 #0+i + // 7 6 5 4 #2-i-1 + // 8 9 A B #2+i + // F E D C # + // G I J K + + float x = wavegrid[i] + + wavegrid[PIXEL_COUNT*2-i-1] + + wavegrid[PIXEL_COUNT*2+i] + + wavegrid[PIXEL_COUNT*4-i-1] + + wavegrid[PIXEL_COUNT*4+i]; + + if (x > 255) x = 255; + + pixels[i].r = (x); + pixels[i].b = (255.0f-x); + } + colorled_set_many((uint32_t*) pixels, PIXEL_COUNT); } static void handle_sonar_value(float mm) { - for (int i = PIXEL_COUNT-1; i > 0; i--) { - pixels[i].num = pixels[i-1].num; + for (int i = WAVEGRID_LEN-1; i > 0; i--) { + wavegrid[i] = wavegrid[i-1] * (1.0f - WAVE_DISSIPATION); } float x = mm/5.0f; if (x>255) x = 255; - pixels[0].r = 255-x; - pixels[0].b = x; + wavegrid[0] = 255 - x; display_show(); } @@ -45,7 +71,7 @@ static void sonar(void* arg) { (void)arg; - info("Sonar"); + //info("Sonar"); GPIOB->BSRR = GPIO_Pin_13; delay_us(10); @@ -82,13 +108,13 @@ void display_init(void) { mb = meanbuf_create(10); - for (int i = 0; i < PIXEL_COUNT; i++) { - pixels[i].num = rgb(0, 0, 255); + for (int i = 0; i < WAVEGRID_LEN; i++) { + wavegrid[i] = 0; } display_show(); add_periodic_task(sonar, NULL, 50, true); - add_periodic_task(show, NULL, 50, true); + add_periodic_task(show, NULL, 75, true); }