void Dashboard::StartRunButtonClicked() { if (!run_in_progress) { // start the run start_button->setText("Stop Run"); run_status->setText("<font color='green'>Running</font>"); for (int i = 0; i < NUMBER_OF_LAPS; i++) { lap_actual_time[i]->setText("<h2><font color='grey'>0:00</font></h2>"); } run_in_progress = true; current_lap = 0; avgspeed_numerator = 0.0; avgspeed_denominator = 0; emit StartRun(); } else { // stop the run start_button->setText("Start Run"); run_status->setText("<font color='red'>Stopped</font>"); run_in_progress = false; emit StopRun(); } }
void ExplorationRun(void) { int i; if (pSegment.cnt != 0) { switch (DispDotMatrixWait("There are recorded data. Continue?")) { case SW_PRESS: return; default: break; } } // clear rSegment. clrSegStruct = (char *) &rSegment; for (i = 0; i < sizeof(rSegment); i++) *clrSegStruct++ = 0; // clear pSegment before recording data. clrSegStruct = (char *) &pSegment; for (i = 0; i < sizeof(pSegment); i++) *clrSegStruct++ = 0; StartBeep(); DispDotMatrix("GOGO"); DelaymSec(1500); StartRun(); bExplorationFlag = TRUE; // constant speed & acceleration // SetRobotSpeedX(EXPLORATION_SPEED); // SetRobotAccX(ACCELERATION); SetMoveCommand(XSPEED, 100000, 0, EXPLORATION_SPEED, 0, ACCELERATION); while (1) { PrintRunStatus(); // prematurely terminate the run with switch press if (bSWFlag) { bExplorationFlag = FALSE; bSWFlag = FALSE; StopRun(); break; } if (bStopFlag) { rSegment.totalDisp = curPos[XSPEED] / DIST_mm_oc(1); StopRun(); ProcessData(); DispExplorationStats(); break; } } }
VOID WINAPI ServiceMain(DWORD dwNumServicesArgs, LPSTR *lpServiceArgVectors) { LOG_TRACE(); if (1 < dwNumServicesArgs && 0 == strcmp("MediaBypass", lpServiceArgVectors[1])) { AppContextMgr::Instance().SetBypass(TRUE); } g_hSvcCtrl = RegisterServiceCtrlHandler(MY_SERVICE_NAME, ControlHandler); if (NULL == g_hSvcCtrl) { LOG_RUN_ERROR("RegisterServiceCtrlHandler failed."); return; } // SERVICE_START_PENDING g_svc_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS; g_svc_status.dwCurrentState = SERVICE_START_PENDING; g_svc_status.dwControlsAccepted = SERVICE_ACCEPT_STOP; g_svc_status.dwWin32ExitCode = NO_ERROR; g_svc_status.dwServiceSpecificExitCode = 0; g_svc_status.dwCheckPoint = 0; g_svc_status.dwWaitHint = 0; SetServiceStatus(g_hSvcCtrl, &g_svc_status); LOG_RUN_DEBUG("SetServiceStatus SERVICE_START_PENDING"); // 初始化SDK int iRet = AppContextMgr::Instance().Init(); if (eLTE_SVC_ERR_SUCCESS != iRet) { LOG_RUN_ERROR("Init elte sdk failed.(%d)", iRet); } else { // SERVICE_RUNNING g_svc_status.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(g_hSvcCtrl, &g_svc_status); LOG_RUN_DEBUG("SetServiceStatus SERVICE_RUNNING"); // 开启业务监听 StartRun(); // 退出SDK iRet = AppContextMgr::Instance().Exit(); if (eLTE_SVC_ERR_SUCCESS != iRet) { LOG_RUN_ERROR("Exit elte sdk failed.(%d)", iRet); } } // SERVICE_STOPPED g_svc_status.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(g_hSvcCtrl, &g_svc_status); LOG_RUN_DEBUG("SetServiceStatus SERVICE_STOPPED"); }//lint !e818
void SetupJob () { AllocArrays (); InitCoords (); InitVels (); timeNow = nextSumTime = 0.; collCount = crossCount = 0.; StartRun (); ScheduleEvent (0, MOL_LIMIT + 6, nextSumTime); InitFreePath (); }
void SetupJob () { SetupFiles (); AllocArrays (); InitCoords (); InitVels (); timeNow = nextSumTime = 0.; collCount = crossCount = 0.; countGrid = 0; nextSnapTime = intervalGrid; StartRun (); GridAverage (0); ScheduleEvent (0, MOL_LIMIT + 6, nextSumTime); ScheduleEvent (0, MOL_LIMIT + 7, nextSnapTime); }
void SpeedTuning(void) { int i, cnt = 0; int16_t dist = 2500; int16_t variable[4][2500]; DispDotMatrix(" "); DelaymSec(1500); StartRun(); SetRobotSpeedX(tuneSpeed); SetRobotAccX(ACCELERATION); while (markerCnt[RIGHT_SENSOR] != 1) { if (bSWFlag) { bSWFlag = FALSE; StopRun(); return; } } SetMoveCommand(XSPEED, dist, 0, tuneSpeed, tuneSpeed, ACCELERATION); while (1) { sprintf(s, "%04d", linePosition); DispDotMatrix(s); DelaymSec(1); // record every 1 msec if (EndOfMove(XSPEED)) { StartBeep(); break; } if (bStopFlag) break; if (bSWFlag) { bSWFlag = FALSE; break; } if (cnt <= 2500) { variable[0][cnt] = linePosition; variable[1][cnt] = alignmentSpeed; variable[2][cnt] = posErr[WSPEED]; variable[3][cnt] = posPWM[WSPEED]; cnt++; } } StartBeep(); StopRun(); sprintf(s, "%4d", cnt); DispDotMatrixWait(s); for (i = 0; i < cnt; i++) { printf("%-4d %4d %4d %4d\n", variable[0][i], variable[1][i], variable[2][i], variable[3][i]); } StartBeep(); DispDotMatrixWait("Done"); }
void RecordSegment(void) { int i, cnt = 0; char s[5]; int16_t variable[2500]; // int16_t variable[2][2500]; // int16_t line_position_med[500], *med_sort; // int a, b; DispDotMatrix(" "); DelaymSec(1500); StartRun(); bRecordFlag = TRUE; bSwapSide = TRUE; SetRobotSpeedX(EXPLORATION_SPEED); SetRobotAccX(ACCELERATION); while (markerCnt[RIGHT_SENSOR] != 1) { if (bSWFlag) { bSWFlag = TRUE; StopRun(); return; } } while (1) { sprintf(s, "%04d", linePosition); DispDotMatrix(s); DelaymSec(1); // record every 1 msec if (cnt <= 2500) { variable[cnt] = linePosition; // variable[0][cnt] = gyroReading; // variable[1][cnt] = PIDFeedback[WSPEED]; cnt++; } if (bStopFlag) break; if (bSWFlag) { bSWFlag = FALSE; break; } } StartBeep(); StopRun(); bRecordFlag = FALSE; bSwapSide = FALSE; DispDotMatrixWait("Segment recorded successfully"); StartBeep(); clrscr(); sprintf(s, "%4d", cnt); DispDotMatrixWait(s); DispDotMatrix(" "); // insertion sort (median) // for (i = 0; i < cnt; i += 5) { // med_sort = line_position+i; // // for (a = 1; a < 5; a++) { // while (med_sort[a] < med_sort[a-1]) { // b = med_sort[a]; // med_sort[a] = med_sort[a-1]; // med_sort[a-1] = b; // // a--; // // if (!a) // break; // } // } // // line_position_med[i%5] = med_sort[2]; // } for (i = 0; i < cnt; i++) { printf("%-4d\n", variable[i]); // printf("%-4d %-3d\n", variable[0][i], variable[1][i]); // printf("%-3d\n", line_position_med[i]); } WaitSW(); }
void FastRun(int fastType) { sSeg segment; int index, *i = &segmentIndex; char s[4]; if (pSegment.cnt == 0) { DispDotMatrixWait("No data recorded"); return; } StartBeep(); DispDotMatrix("GOGO"); DelaymSec(1500); bFastFlag = TRUE; ComputeSpeed(fastType); segment = pSegment; segPtr = &segment; segmentIndex = 0; StartRun(); // SetRobotSpeedX(segment.topSpeed[*i]); // SetRobotAccX(ACCELERATION); SetMoveCommand(XSPEED, 1000, 0, segment.topSpeed[*i], segment.topSpeed[*i], ACCELERATION); while (markerCnt[RIGHT_SENSOR] != 1) { if (bSWFlag) { bSWFlag = FALSE; StopRun(); return; } } StartRunTimer(); for (; *i < segment.cnt; (*i)++) { sprintf(s, "%4d", *i); DispDotMatrix(s); WaitSyncFastRun(); if (MoveRobotFastRun(XSPEED, segment.length[*i], segment.brakeDist[*i], segment.topSpeed[*i], segment.endSpeed[*i], ACCELERATION)) break; // switch break // if (segment.bSyncFlag[*i]) { // *i = markerCnt[LEFT_SENSOR] - 1; // } segment.curDisp += segment.length[*i]; if (bStopFlag) { (*i)++; break; } // StartBeep(); } StopRunTimer(); StopRun(); align_Kp = 4; align_Kd = 40; sprintf(s, "%04d", runTime); // DispDotMatrixWait(s); WaitSW(); clrscr(); printf("segment cnt: %d i: %d\n", segment.cnt, *i); printf("No. State Top Min Max Dist Length Actual Break Marker\n"); printf("--- ----- --- --- --- ---- ------ ------ ----- ------\n"); for (index = 0; index < *i; index++) { printf("%3d %-9s %4dmm/s %4dmm/s %4dmm/s %4dmm %4dmm %4dmm %d %d\n", index, run_state[segment.state[index]], segment.topSpeed[index], segment.actMinSpeed[index], segment.actMaxSpeed[index], segment.dist[index], segment.length[index], segment.actDisp[index], segment.bActBreakFlag[index], segment.bMarkerBreakFlag[index]); } DispDotMatrixWait("Done"); }
void JustDied(Unit* ) { StartRun(); }