計算車輛速度DEMO

下面demo是用兩個按鍵來模擬車輛經(jīng)過車檢器的信號和傳感器采集到新數(shù)據(jù)的信號。
K1按鍵是用了模擬車檢器的信號
K2按鍵用來模擬接收到傳感器新數(shù)據(jù)的信號

#include "bsp.h"        
#include <stdio.h>
#include <stdint.h>
#include <time.h>

/*
*********************************************************************************************************
*   函 數(shù) 名: main
*   功能說明: c程序入口
*   形    參: 無
*   返 回 值: 錯誤代碼(無需處理)
*********************************************************************************************************
*/

int main(void)
{
    uint8_t   ucKeyCode;    
    bsp_Init();     /* 硬件初始化 */
    bsp_StartAutoTimer(1, 1);   /* 啟動1個1ms的自動重裝的定時器 */
        uint64_t count;             /* 系統(tǒng)啟動后經(jīng)過的毫秒數(shù) */
        uint64_t k1PressTime = 0;   /* 車輛經(jīng)過車檢器時經(jīng)過的毫秒數(shù) */
        uint64_t k1ReleaseTime =0;  /* 車輛壓到傳感器時經(jīng)過的毫秒數(shù) */
    /* 主程序大循環(huán) */
    while (1)
    {
        /* CPU空閑時執(zhí)行的函數(shù),在 bsp.c */
        bsp_Idle();     
        if (bsp_CheckTimer(1))  //之前使用系統(tǒng)時鐘click() 一直返回-1,所以在這里做一個1ms的定時器。
        {
            count++;              
        }
    
        /* 處理按鍵事件 */
        ucKeyCode = bsp_GetKey();  /*從按鍵FIFO緩沖區(qū)讀取一個鍵值。*/
        if (ucKeyCode > 0)
        {
            /* 有鍵按下 */
            switch (ucKeyCode)
            {
                case KEY_DOWN_K1:   /* 按鍵K1鍵按下 */        /* 這里也是一個電平信號,可以當(dāng)做車檢器的信號*/
                        k1PressTime = count;         /* 記錄車輛壓到傳感器時經(jīng)過的毫秒數(shù) */    
                        printf("經(jīng)過車檢器\r\n");
                        break;      
                case KEY_DOWN_K2:       /* 按鍵K2鍵按下 */    /*這里可以當(dāng)做檢測到車輛壓到傳感器時產(chǎn)生新數(shù)據(jù)的信號*/
                      if(!k1PressTime)
                      {
                          printf("未通過車檢器\r\n");
                          break;
                      }
                        k1ReleaseTime = count;               /* 記錄傳感器時產(chǎn)生新數(shù)據(jù)時經(jīng)過的毫秒數(shù)(按下K2鍵的電平信號) */ 
                        uint64_t timeBetweenPresses = k1ReleaseTime - k1PressTime;
                        printf("時間間隔為:%d 毫秒\r\n", timeBetweenPresses);
                        double secondsBetweenPresses = (double)timeBetweenPresses / 1000.0;
                        double s = 0.0028 / (secondsBetweenPresses / 3600.0);
                        printf("車輛速度為:%lf Km/h\r\n", s);
                            k1PressTime = 0;
                    break;              
                
                default:
                    break;
            }
        }
    }
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容