//
|
// 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;
|
}
|
}
|
}
|