Придумал свой алгоритм
1. На нейтральной передаче, обновляем сразу (напрямую с датчика без задержки) уровень топлива, в большинстве случаев на нейтральной передаче мотоцикл стоит прямо и не двигается.
2. Если передача не нейтральная начинаем высчитывать минимальное и максимальное значение значение с датчика уровня топлива (если появляется значение больше или меньше существующих заменяем)  Может нужно выбирать наименьшее значение  из максимального и минимального ? 
3. Каждые 200 метров записываем это значение в массив (потому что если мы не едем, топливо не расходуется) 
4. Каждый километр высчитываем средне арифметическое из ячеек массива 
Вот код, не на С++ под рукой больше ничего небыло, для проверки самое то, ардуинки стоят на мотоцикле. Думаю всё понятно, вместо километража таймеры и счётчики
Как это работает - fuel.zip
	PHP код:
	
#NoTrayIcon
Global $Max = 0, $Min = 500, $Random = 0, $index = 0, $sa = 0
Global $metr = 0 ; 200 метровый счетчик, примерно по времени 5 секунд =)
Dim $Array[6]
$Form1 = GUICreate("", 241, 226, 649, 150)
$Label1 = GUICtrlCreateLabel("", 48, 20, 156, 25)
$Label2 = GUICtrlCreateLabel("", 48, 40, 156, 25)
$Label3 = GUICtrlCreateLabel("", 48, 60, 156, 25)
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case -3
            Exit
        Case Else
            If _timer(@MSEC) = 1 Then ; таймер раз в секунду
                GUICtrlSetData($Label1, "Mаксимальное : " & $Max)
                GUICtrlSetData($Label2, "Минимальное : " & $Min)
                $Random = Random(100, 250, 1) ; Имитируем АЦП датчика уровня топлива
                If $Random > $Max Then $Max = $Random
                If $Random < $Min Then $Min = $Random
                If $index > 5 Then $index = 0
                If $metr > 5 Then $metr = 0
                $Array[$index] = ($Max + $Min) / 2 ; Раз в секунду записываем значения в массив
                $index += 1
                $metr += 1
                If $metr > 5 Then ; проехали 200 метров (типа 5 секунд прошло =) )
                    $sa = ($Array[0] + $Array[1] + $Array[2] + $Array[3] + $Array[4]) / 5
                    GUICtrlSetData($Label3, "Среднее значение : " & $sa)
                    $Max = 0
                    $Min = 250
                EndIf
            EndIf
    EndSwitch
WEnd
Func _timer($sec)
    For $i = 500 To 520 Step 1
        If $sec = $i Then
            Return 1
        EndIf
    Next
EndFunc   ;==>_timer