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

📄 fstarcmd.h

📁 手柄驱动DEMO程序源码
💻 H
字号:
// VoyCmd.h: interface for the CFstarCmd class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_VOYCMD_H__8007E941_6DAD_4AA1_88D7_21A255E426F0__INCLUDED_)
#define AFX_VOYCMD_H__8007E941_6DAD_4AA1_88D7_21A255E426F0__INCLUDED_

#include "IPhy.h"
#include "IBehavior.h"
#include "NetSend.h"

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define MAX_BUF				1024		//接受缓冲长度
#define MAX_SEND			20			//发送缓冲长度
#define SPEED                800		//寻光时的基准速度
#define  IO_ONLYSEARCH		1					//IO查询标志
#define  IO_AUTOMOVE		2					//避障前进
#define  IO_REMOTESEARCH	3					//远程主机查询IO
#define  IO_FOLLOW			4					//避障跟球
#define  IO_FORLIGHT		5					//避障寻光
#define  IO_FOREDGE			6					//边缘检测

#define  AD_ONLYSEARCH		1					//AD查询标志

#define  AD_FORLINE			3					//寻线前进
#define  AD_FORLIGHT		4					//寻光前进
#define  AD_OFFHEAT		    5					//避开热源
#define  AD_REMOTESEARCH	6					//远程主机查询AD
#define  AD_AHFORLIGHT		7					//避碰寻光

#define  UM_TEXT           WM_USER+100
#define  UM_VOICECONTROL   WM_USER+101

#define STOP		0					//停止状态
#define FORWARD		1					//笔直前行
#define BACKWARD	2					//笔直后退
#define RIGHT		3					//原地右转
#define LEFT		4					//原地左转
#define RIGHTFRONT	5					//右转前进
#define LEFTFRONT	6					//左转前进
#define RIGHTBACK	7					//右转后退
#define LEFTBACK	8					//左转后退

#define AWAYOBSTACLE    9                   //避障
#define FOREDGE			10					//边缘检测
#define FORLINE			11					//寻线
#define USONICON		12					//超声
#define FORLIGHT		13					//寻光
#define TERMINATE		14                  //终止例子程序
#define USAWAYOBSTACLE  15				    //超声避障
#define USONICFOLLOW    16					//超声跟踪
#define USONLYSEARCH    17                  //超声查询
#define USREMOTESEARCH  18					//远程超声查询
#define SELFDETECT		19

class CCaptureVideo;
class IBehavior;

class CFstarCmd  
{
	friend class CSampleGrabberCB;
public:
    UCHAR wheel_diameter;                //轮子直径 
    UCHAR wheel_distance;                //轮间距

	UCHAR light_stop;					//寻光时的停止标记
	UCHAR demo_io_flag;					//IO标记
	UCHAR demo_ad_flag;					//AD标记
	UCHAR demo_us_flag;					//超声标记
	UCHAR detect_flag;					//自检标记
	UCHAR maxLgt;						//光强最高阈值
	UCHAR minLgt;						//光强最低阈值
	UCHAR maxTmp;						//温度最高阈值
	UCHAR minTmp;						//温度最低阈值
	UCHAR hitStatus;					//避碰开关状态
	CStatic *pUsdis;					//超声查询距离静态文本对象指针
	CStatic *pHitstatus;				//障碍方向静态文本对象指针
	CStatic *pLlight;					//左光敏数值静态文本对象指针
	CStatic *pRlight;					//右光敏数值静态文本对象指针
	CStatic *pLAve;						//左右光敏平均值静态文本对象指针
	CStatic *pLSub;						//左右光敏差值静态文本对象指针
	CStatic *pLtmp;						//左温敏数值静态文本对象指针
	CStatic *pRtmp;						//右温敏数值静态文本对象指针
	CStatic *pTSub;						//左右温敏差值静态文本对象指针
	CStatic *pTAve;						//左右温敏均值静态文本对象指针
	CStatic *pLf;						//左前方避碰开关状态图标显示对象指针
	CStatic *pLb;						//左后方避碰开关状态图标显示对象指针
	CStatic *pRf;						//右前方避碰开关状态图标显示对象指针
	CStatic *pRb;						//右后方避碰开关状态图标显示对象指针
	CStatic *pFl;						//左红外状态图标显示
	CStatic *pFr;						//有红外状态图标显示
	CStatic *pAD7;						//第7路AD数值静态文本对象指针
	CStatic *pIO4;						//第4路IO状态图标显示对象指针
	CStatic *pIO5;						//第5路IO状态图标显示对象指针
	CStatic *pIO6;						//第6路IO状态图标显示对象指针
	CStatic *pIO7;						//第7路IO状态图标显示对象指针
	CStatic *pIO8;						//第4路IO状态图标显示对象指针
	CStatic *pIO9;						//第5路IO状态图标显示对象指针
	CStatic *pIO10;						//第6路IO状态图标显示对象指针
	CStatic *pIO11;						//第7路IO状态图标显示对象指针
	CStatic *pIO12;						//第4路IO状态图标显示对象指针
	CStatic *pIO13;						//第5路IO状态图标显示对象指针
	CStatic *pIO14;						//第6路IO状态图标显示对象指针
	CStatic *pIO15;						//第7路IO状态图标显示对象指针

	HICON   hIon;						//传感器出发状态图标
	HICON   hIoff;						//传感器未触发状态图标
	int m_IOStatus[2];
	UCHAR demoIndex;
	BOOL  bAct1End;
public:

    void goline(long distance,int speed);
    //void turn(int angle,int speed);
    void goarc(UINT dir,int angle,long radius,int speed);
    void lockdir(long distance,int speed);

	void StartAction();

	void Furl();
	void SetPIDpara(UCHAR pid1,UCHAR pid2,UCHAR pid3);	//设置锁定航向PID参数
	void ResetServe();									//所有舵机复位
	void SendArmData(UCHAR angle[10]);	//控制机械臂运动
//	void TurnRByGyro(int inAngle, UCHAR inSpeed);		//通过陀螺使得机器人旋转固定角度
	void DetectBoard();									//检测各个板卡是否工作正常
	void Dance();										//机器人舞蹈
	void TurnOnLgt(UCHAR lrlight);						//探照灯打开
	void TurnOffLgt(UCHAR lrlight);						//探照灯关闭
	void WaveHead(UCHAR angle,UCHAR speed);				//头部转动控制
	void LcdShow(CString cs);							//控制LCD字符显示
	void LasorOn(UCHAR sel);										//激光笔打开
	void LasorOff(UCHAR sel);									//激光笔关闭
	void LockDirection(int speed);			//锁定航向
	void TestMotion(UCHAR motionSelect);				//驱动器调试
	
	void QueryGyro();									//单次查询陀螺仪倾角计数据
	void QueryUS();										//单次查询超声波传感器
	void QueryIO();										//单次查询IO
	void QueryAD();										//单次查询AD
	void QueryADIO();									//同时查询ADIO(单次)
	void AutoQueryGyro(UINT TimeCap);					//以一定的周期查询陀螺仪倾角计数据
	void AutoQueryADIO(UINT TimeCap);					//以一定的周期查询同时查询ADIO
	void AutoQueryAD(UINT TimeCap);						//以一定的周期查询同时查询AD
	void AutoQueryIO(UINT TimeCap);						//以一定的周期查询同时查询IO
	void AutoQueryUS(UINT TimeCap);						//以一定的周期查询同时查询超声传感器
	void SearchMPara();									//查询驱动器信息
	void stop();										//停止机器人运动


	void SetWnd(HWND hWnd);								//设置主窗口句柄	
	void SetServMotor(int inSpeed);						//设置伺服电机
	void Demarcate();									//陀螺仪的标定
	void TurnByGyro(int inAngel,int inSpeed);		//左转(基于陀螺)
//	void SpeedByGyro(int inSpeed);						//直行(基于陀螺)
	UINT GetState();									//返回当前机器人状态
	void SetBehavior(IBehavior * pBeh);					//设定机器人行为对象
//	void QueryInfrared();								//单次查询红外传感器
	void SetRMotorSpeed(int inrightspeed);				//设置右电机速度
	void SetLMotorSpeed(int inleftspeed);				//设置左电机速度
	void SetBothMotorsSpeed(int inleftspeed, int inrightspeed);		//同时设置两个电机速度
	void Brake(UCHAR breakmode);						//刹车
	void Parse(void *buf, int length);					//解析接收到的指令
	
	CFstarCmd();
	virtual ~CFstarCmd();

	IPhy * m_pPhy;										//通讯硬件对象指针
	IBehavior * m_pBeh;									//行为对象指针
	CCaptureVideo * m_pCap;								//视频捕捉对象指针
	
	BOOL bToEndThreads;									//退出所有子线程标记,退出程序前置TRUE
	BOOL bToEndDetect;									//退出自检线程标志
	BOOL bToEndDance;									//退出舞蹈线程标志
	UINT QueryUSonicTime;								//超声传感器查询周期
	UINT QueryInfraRedTime;								//红外传感器查询周期
	UINT QueryCompassTime;								//罗盘信息查询周期
	UINT QueryIOTime;									//IO查询时间间隔
	UINT QueryADTime;									//AD查询时间间隔
	UINT QueryADIOTime;									//同时查询ADIO时间间隔
	UINT QueryGyroTime;									//陀螺仪查询周期

	int m_iLspeed;										//左电机速度
	int m_iRspeed;										//右电机速度
	FLOAT m_fSpReduc;									//电机减速比

	int m_XRoll;										//X滚转角
	int m_YRoll;										//Y滚转角

	CNetSend m_netsend;									//网络发送对象

protected:
	UCHAR serveData[24];								//12路舵机位置和速度数据
	UCHAR motorData[8];
	UCHAR m_Addata[8];									//8路AD数据
	UCHAR m_USdata[2];									//16路IO数据
	int lspeed;											//左电机速度
	int rspeed;											//右电机速度
	UCHAR jumpflag;										//跳出死循环标志
	UCHAR stopCounter;									//停止技术标志
protected:
	static UINT DetectSysThread(LPVOID pParam);
	static UINT DanceThread(LPVOID pParam);
	static UINT ActionDemo(LPVOID pParam);
protected:
	void EndAction();
	void m_AdForlight();
	void CopyArray(UCHAR * pSource);					//拷贝数值数据到舵机数组
	void m_SetUSData();									//把返回的超声波数据计算并显示在街面上

	void PWMoff();										//四路电机信号控制
	void m_AwayObstacle(UCHAR temp);					//避障策略实现
	void m_Forlight();									//寻光策略实现
	void m_ForEdge();									//循线策略实现
	void m_UsAwayObstacle();						//超声避障策略实现
	void m_UsFollow();								//超声跟踪策略实现
	void m_USprocess();									//超声数据处理
	void m_SetIOData();									//界面显示IO数据
	void m_SetADData();									//界面显示AD数据
	void m_OffHeat();									//原理热源策略实现
	void m_SetHitIcon(UCHAR temp);						//界面显示避碰开关状态
	void m_IOProcess();									//IO数据处理
	void m_ADProcess();									//AD数据处理
	void m_UpdateState();								//根据电机速度值更新状态标记
	WORD m_CalculateSpeed( int speed);					//将长整型速度换算成两字节
	virtual void m_ParseFrame(UCHAR* buf, int length);	//将接收缓存数据进行切分


	CString m_csHitFlag;
	UCHAR *m_pRcvBuf;									//数据接收缓冲
	UCHAR *m_pSendBuf;									//数据发送缓冲
	unsigned int m_nSendlength;							//已发送字节计数
	unsigned int m_nRcvIndex;							//已接收字节计数

	BOOL m_bFrameStart;									//指令解析首字符标记
	UCHAR m_cLast;										//检验头两个字节用到的辅助变量
	unsigned int m_nFrameLength;						//当前指令长度

	UINT nState;										//机器人状态标记
	HWND m_hWnd;										//窗口句柄
private:	
	DOUBLE m_CalDistance(UCHAR inUSChar);		//由超声返回数值计算距离
	UCHAR m_CalSum(int length);					//为指令缓冲计算校验和
	void m_GenerateSendBuffer(UCHAR addr, UCHAR status, UCHAR length, UCHAR ctrlcode, UCHAR *data);
	void m_Response(UCHAR *recbuf, int length);	//受到指令后的处理函数
	void m_ResponseError();						//收到不符合协议的指令的处理函数
	BOOL m_ValidFrame(UCHAR *buf, int length);	//判断一个指令是否符合协议
	void m_ParseBuffer(const UCHAR buf);		//对一片缓冲区数据进行指令切分
	void m_ResetSendBuf();						//清空发送缓冲区
	void m_ResetRcvBuf();						//清空接收缓冲区
};

#endif // !defined(AFX_VOYCMD_H__8007E941_6DAD_4AA1_88D7_21A255E426F0__INCLUDED_)

⌨️ 快捷键说明

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