Пример #1
0
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();
    }
}
Пример #2
0
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;
		}
	}
}
Пример #3
0
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
Пример #4
0
void SetupJob ()
{
  AllocArrays ();
  InitCoords ();
  InitVels ();
  timeNow = nextSumTime = 0.;
  collCount = crossCount = 0.;
  StartRun ();
  ScheduleEvent (0, MOL_LIMIT + 6, nextSumTime);
  InitFreePath ();
}
Пример #5
0
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);
}
Пример #6
0
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");
}
Пример #7
0
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();
}
Пример #8
0
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");
}
Пример #9
0
 void JustDied(Unit* )
 {
     StartRun();
 }