📄 fstarcmd.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 + -