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)