From b3608d75b6dd9d74aa1a71e1a2ef2a970e6a050c Mon Sep 17 00:00:00 2001 From: fctom1215 <fctom1215@outlook.com> Date: 星期三, 18 三月 2020 23:29:48 +0800 Subject: [PATCH] 挡位匹配. --- lib/src/main/cpp/test_items2/road_exam.cpp | 65 +++++++++++++++++++++++++++++++- 1 files changed, 62 insertions(+), 3 deletions(-) diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp index c0b82e3..80da3de 100644 --- a/lib/src/main/cpp/test_items2/road_exam.cpp +++ b/lib/src/main/cpp/test_items2/road_exam.cpp @@ -22,6 +22,8 @@ static const int TURN_THRESHOLD = 10; static const int TURN_CHECK_INTERVAL = D_SEC(1); +const double SLIDE_DISTANCE_THRESHOLD_RED = 0.3; +const double SLIDE_DISTANCE_THRESHOLD_YELLOW = 0.1; static bool occurCrashRedLine; static bool occurCrashGreenLine; @@ -36,6 +38,10 @@ static bool reportStopCarOnRedArea; static PointF stopPoint; +static bool slideLongDistance; +static bool slideNormalDistance; +static bool occurSlide; + static struct drive_timer { int hour; int min; @@ -49,6 +55,7 @@ static const uint32_t TURN_SIGNAL_LAMP_ADVANCE = D_SEC(3); static const double MAX_SPEED = 40.0 * 1000.0 / 3600.0; +static const int SPEED_SHIFT_TABLE[][2] = {{0, 20}, {5, 30}, {15, 40}, {25, 10000}, {35, 10000}}; static void Rtk2DirveTimer(struct drive_timer &tm, const struct RtkTime *rtkTime); static char isTurn(int currYaw, int prevYaw); @@ -71,6 +78,9 @@ prevMoveDirect = 0; reportStopCarOnRedArea = false; + occurSlide = false; + slideLongDistance = false; + slideNormalDistance = false; } void TestRoadGeneral(LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime) @@ -85,14 +95,40 @@ occurOverSpeed = false; } + // 鎸′綅鍖归厤妫�娴� + switch (ReadCarStatus(SHIFT)) { + case SHIFT_N: + if (moveDirect != 0) { + + } + break; + case SHIFT_1: + if (ConvertMs2KMs(speed) < SPEED_SHIFT_TABLE[0][0] || ConvertMs2KMs(speed) > SPEED_SHIFT_TABLE[0][1]) { + + } + break; + case SHIFT_2: + break; + case SHIFT_3: + break; + case SHIFT_4: + break; + case SHIFT_5: + break; + default:break; + } + + // 璧锋鍚庢粦 if (moveDirect != prevMoveDirect) { if (moveDirect == 0) { stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10); reportStopCarOnRedArea = false; DEBUG("鍋滆溅浜� %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss); - } else if (moveDirect == -1) { - + } else if (moveDirect == -1 && prevMoveDirect == 0) { + DEBUG("寮�濮嬪悗婊�"); + stopPoint = car->basePoint; + occurSlide = true; } prevMoveDirect = moveDirect; } else if (moveDirect == 0) { @@ -104,8 +140,31 @@ DEBUG("涓�斿仠杞�"); reportStopCarOnRedArea = true; } + } else if (moveDirect == -1) { + if (occurSlide) { + double slideDistance = DistanceOf(stopPoint, car->basePoint); - stopPoint = car->basePoint; + if (slideDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) { + slideNormalDistance = true; + } + + if (slideDistance > SLIDE_DISTANCE_THRESHOLD_RED && !slideLongDistance) { + // 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍� + AddExamFault(5, rtkTime); + DEBUG("鍚庢粦瓒呰繃30鍘樼背"); + slideLongDistance = true; + } + } + } else { + if (slideNormalDistance) { + // 鍚庢粦锛屾墸10鍒� + AddExamFault(18, rtkTime); + DEBUG("鍚庢粦瓒呰繃10鍘樼背, 浣嗕笉瓒呰繃30鍘樼背"); + } + + slideNormalDistance = false; + slideLongDistance = false; + occurSlide = false; } switch (ReadCarStatus(TURN_SIGNAL_LAMP)) { -- Gitblit v1.8.0