?? 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; //機器人狀態標記
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 + -