下面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;
}
}
}
}