⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robocar.cpp

📁 通过使机器人进行简单的图像识别
💻 CPP
字号:
#include "stdafx.h"
#include "RoboCar.h"

CRoboCar::CRoboCar(void) 
: m_lSwapTime(ACTION_INFINITE_TIME)
{
	m_port.OpenPort();
}

CRoboCar::~CRoboCar(void)
{
	m_port.ClosePort();
}

// 等待单片机发送指令运行
void CRoboCar::WaitMessage(void)
{
	char c= 0x00;
	while(c != 'S')
	{
		m_port.Recive(&c, 1);
	}
}

// 是否应该关闭系统
bool CRoboCar::IsShutDown(void)
{
	char c= 0x00;
	m_port.Recive(&c, 1);
	if (c == 'C')
		return true;
	else
		return false;
}

// 设置状态和状态持续时间(将清空队列),该状态结束之后,进入idle
void CRoboCar::SetStatus(unsigned long lStatus, unsigned long lTime)
{
	ACTIONDESC act;
	act.cAct= lStatus;
	act.lTime= lTime;

	Action(act);

	m_lstAct.clear();
	m_lstAct.push_back(act);
}

// 将一个状态添加到动作队列中
void CRoboCar::PushStatus(unsigned long lStatus, unsigned long lTime)
{
	ACTIONDESC act;
	act.cAct= lStatus;
	act.lTime= lTime;

	m_lstAct.push_back(act);
}

// 更新状态,由外部分配时间片
void CRoboCar::ResponseTick(void)
{
	if (m_lstAct.empty())
	{	// 队列为空,添加一个IDLE状态
		SetStatus(ACTION_IDLE);
	}
	else
	{
		unsigned int dw= GetTickCount();
		if (m_lSwapTime <= dw)
		{
			m_lstAct.pop_front();
			if (!m_lstAct.empty())
			{
				list<ACTIONDESC>::iterator iter= m_lstAct.begin();
				Action((*iter));
			}
		}
	}
}

// 阻塞模式动作,直到动作完成(时间过去)再返回
void CRoboCar::ActionSlave(unsigned long lStatus, unsigned long lTime)
{
	SetStatus(lStatus, lTime);

	while(GetTickCount() < m_lSwapTime)
		;

	//SetStatus(ACTION_IDLE);
}

// 发送串口指令
void CRoboCar::Action(ACTIONDESC &act)
{
	// 计算动作停止的时刻
	if (act.lTime == ACTION_INFINITE_TIME)
	{
		m_lSwapTime= ACTION_INFINITE_TIME;
	}
	else
	{
		unsigned dw= ::GetTickCount();
		m_lSwapTime= dw + act.lTime;
	}

	// 发送串口数据
	switch(act.cAct)
	{
	case ACTION_LEFT:
		m_port.SendBytes("L", 1);
		break;
	case ACTION_RIGHT:
		m_port.SendBytes("R", 1);
		break;
	case ACTION_FORWARD:
		m_port.SendBytes("F", 1);
		break;
	case ACTION_BACKWARD:
		m_port.SendBytes("B", 1);
		break;
	case ACTION_IDLE:
		m_port.SendBytes("P", 1);
		break;
	default:
		m_port.SendBytes("P", 1);
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -