Показано с 1 по 10 из 178

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Местный
    Регистрация
    07.12.2014
    Сообщений
    102
    Вес репутации
    152

    По умолчанию Re: Бортовой компьютер мотоцикла

    Придумал свой алгоритм

    1. На нейтральной передаче, обновляем сразу (напрямую с датчика без задержки) уровень топлива, в большинстве случаев на нейтральной передаче мотоцикл стоит прямо и не двигается.

    2. Если передача не нейтральная начинаем высчитывать минимальное и максимальное значение значение с датчика уровня топлива (если появляется значение больше или меньше существующих заменяем) Может нужно выбирать наименьшее значение из максимального и минимального ?

    3. Каждые 200 метров записываем это значение в массив (потому что если мы не едем, топливо не расходуется)

    4. Каждый километр высчитываем средне арифметическое из ячеек массива

    Вот код, не на С++ под рукой больше ничего небыло, для проверки самое то, ардуинки стоят на мотоцикле. Думаю всё понятно, вместо километража таймеры и счётчики

    Как это работает - fuel.zip

    PHP код:
    #NoTrayIcon

    Global $Max 0$Min 500$Random 0$index 0$sa 0
    Global $metr 200 метровый счетчикпримерно по времени 5 секунд =)
    Dim $Array[6]

    $Form1 GUICreate(""241226649150)
    $Label1 GUICtrlCreateLabel(""482015625)
    $Label2 GUICtrlCreateLabel(""484015625)
    $Label3 GUICtrlCreateLabel(""486015625)
    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(1002501) ; Имитируем АЦП датчика уровня топлива
                    
    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) / Раз в секунду записываем значения в массив
                    $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 
    Последний раз редактировалось Oleg_33; 17.04.2016 в 15:37.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 6 (пользователей: 0 , гостей: 6)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •