diff --git a/src/main.c b/src/main.c index 246b0a2e70600e1f2c93ce8ee32f1ea2d1cb8496..745d68634890b9af6618e37f16fc232179ded427 100644 --- a/src/main.c +++ b/src/main.c @@ -4,9 +4,8 @@ #include <unistd.h> #include <hardware/pwm.h> -double percentage_1 = 0; -double percentage_2 = 0; -bool flipflop = false; +double rollingperc[4] = {0, 0, 0, 0}; +int pos = 0; const uint8_t init[4] = {0x21, 0xa0, 0xef, 0x81}; const uint8_t zeile[8] = {0x00, 0x02, 0x04, 0x06, 0x08, 0x10, 0x12, 0x14}; @@ -165,18 +164,14 @@ void callback(uint gpio, uint32_t events) volatile int percentage = (distance / 10) * 100; - if (flipflop) + rollingperc[pos] = percentage; + pos++; + if (pos > 3) { - percentage_1 = percentage; - flipflop = false; - } - else - { - percentage_2 = percentage; - flipflop = true; + pos = 0; } - int avg = (percentage + percentage_1 + percentage_2) / 3; + int avg = (rollingperc[0] + rollingperc[1] + rollingperc[2] + rollingperc[3]) / 4; // if zwischen 90, 110, stop if (avg > 90 && avg < 110) @@ -192,7 +187,7 @@ void callback(uint gpio, uint32_t events) { motor_backward(); } - set_progress((percentage + percentage_1 + percentage_2) / 3); + set_progress(avg); } else if (events & GPIO_IRQ_EDGE_RISE)