added bounce effect

master
Ondřej Hruška 9 years ago
parent d01e40e174
commit 5036188e6a
  1. 42
      project/display.c

@ -7,27 +7,53 @@
#define PIXEL_COUNT 30 #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 ws2812_rgb_t pixels[PIXEL_COUNT] = {};
static MeanBuf *mb; static MeanBuf *mb;
void display_show(void) 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); colorled_set_many((uint32_t*) pixels, PIXEL_COUNT);
} }
static void handle_sonar_value(float mm) static void handle_sonar_value(float mm)
{ {
for (int i = PIXEL_COUNT-1; i > 0; i--) { for (int i = WAVEGRID_LEN-1; i > 0; i--) {
pixels[i].num = pixels[i-1].num; wavegrid[i] = wavegrid[i-1] * (1.0f - WAVE_DISSIPATION);
} }
float x = mm/5.0f; float x = mm/5.0f;
if (x>255) x = 255; if (x>255) x = 255;
pixels[0].r = 255-x; wavegrid[0] = 255 - x;
pixels[0].b = x;
display_show(); display_show();
} }
@ -45,7 +71,7 @@ static void sonar(void* arg)
{ {
(void)arg; (void)arg;
info("Sonar"); //info("Sonar");
GPIOB->BSRR = GPIO_Pin_13; GPIOB->BSRR = GPIO_Pin_13;
delay_us(10); delay_us(10);
@ -82,13 +108,13 @@ void display_init(void)
{ {
mb = meanbuf_create(10); mb = meanbuf_create(10);
for (int i = 0; i < PIXEL_COUNT; i++) { for (int i = 0; i < WAVEGRID_LEN; i++) {
pixels[i].num = rgb(0, 0, 255); wavegrid[i] = 0;
} }
display_show(); display_show();
add_periodic_task(sonar, NULL, 50, true); add_periodic_task(sonar, NULL, 50, true);
add_periodic_task(show, NULL, 50, true); add_periodic_task(show, NULL, 75, true);
} }

Loading…
Cancel
Save