// // Created by YY on 2020/8/11. // #include "odo_graph.h" #include "../test_items2/road_exam.h" #include "../common/apptimer.h" #include "../utils/xconvert.h" static double odoGraph; static struct drive_timer odoTimer; static double odoPrevSpeed; static int odoCnt; void ResetOdo(void) { odoCnt = 0; odoGraph = 0; } double ReadOdo(void) { return odoGraph; } void UpdataOdo(double speed, int moveDirect, const struct RtkTime *rtkTime) { // 行驶距离,不包含倒车 if (odoCnt == 0 && moveDirect == 1) { odoPrevSpeed = speed; odoCnt = 1; Rtk2DriveTimer(odoTimer, rtkTime); } else if (odoCnt == 1) { if (moveDirect == 1) { uint32_t tm = TimeGetDiff(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss * 10, odoTimer.hour, odoTimer.min, odoTimer.sec, odoTimer.msec * 10); if (tm >= D_SEC(1)) { odoGraph += ((double) tm) * (odoPrevSpeed + speed) / 2.0 / 1000.0; Rtk2DriveTimer(odoTimer, rtkTime); odoPrevSpeed = speed; } } else { odoCnt = 0; } } }