@ -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 , 7 5, true ) ;
}