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

📄 rcdlg.cpp

📁 完整的小车控制程序
💻 CPP
字号:
// RCDLG.cpp : implementation file
//

#include "stdafx.h"
#include "小车控制程序.h"
#include "RCDLG.h"
#include "PictureEx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRCDLG dialog


CRCDLG::CRCDLG(CWnd* pParent /*=NULL*/)
	: CDialog(CRCDLG::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRCDLG)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CRCDLG::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRCDLG)
	DDX_Control(pDX, IDC_PROGRESS1, m_progress);
	DDX_Control(pDX, IDC_GIF_RC, m_gif_rc);
	DDX_Control(pDX, IDCANCEL, m_exit_button);
	DDX_Control(pDX, IDOK, m_ok_button);
	DDX_Control(pDX, IDC_MSCOMM1, m_rc_com);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRCDLG, CDialog)
	//{{AFX_MSG_MAP(CRCDLG)
	ON_WM_KEYDOWN()
	ON_WM_KEYUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRCDLG message handlers

void CRCDLG::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

void CRCDLG::OnOK() 
{
	// TODO: Add extra validation here
	MessageBox("用键盘控制控制小车");
	OPEN_RC_COM();
   m_ok_button.EnableWindow(false);
    m_exit_button.SetFocus();
	if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF1),_T("Gif")))
         m_gif_rc.Draw();
	//CDialog::OnOK();
}

BEGIN_EVENTSINK_MAP(CRCDLG, CDialog)
    //{{AFX_EVENTSINK_MAP(CRCDLG)
	ON_EVENT(CRCDLG, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CRCDLG::OnOnCommMscomm1() 
{
	// TODO: Add your control notification handler code here
	
}

BOOL CRCDLG::OnInitDialog() 
{
	
	CDialog::OnInitDialog();
    m_progress.SetPos(0);
    m_progress.SetRange(0,50);
	m_progress.SetStep(10);
	step=0;

	if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_02),_T("Gif")))
         m_gif_rc.Draw();
	
	send_data1[0]='#';
    send_data1[1]='r';
   send_data1[2]='c';
   send_data1[4]='*';
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CRCDLG::PreTranslateMessage(LPMSG lpmsg) 
{
BOOL bHandleNow = FALSE;
switch (lpmsg->message)
{
case WM_KEYDOWN:
switch (lpmsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_SPACE:
bHandleNow = TRUE;
break;
} 
if (bHandleNow) 
OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam)); 
break; 

case WM_KEYUP:
switch (lpmsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_SPACE:
bHandleNow = TRUE;
break;
} 
if (bHandleNow) 
OnKeyUp(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam)); 
break; 
} 
return bHandleNow; 


//return CDialog::PreTranslateMessage(pMsg);
}

void CRCDLG::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
    int i;

	if (nChar==VK_UP)              //启动小车前进
	{ 
	 if (up_pressed==0) 
	 {
	 
		 if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_UP),_T("Gif")))
         m_gif_rc.Draw();
       m_progress.StepIt();
       up_pressed=1;
	   send_data1[3]='1';	
   	   CByteArray send;
       send.RemoveAll();
	   send.SetSize(5);
       for(i = 0; i <5; i++)
	   send.SetAt(i, send_data1[i]);
	   m_rc_com.SetOutput(COleVariant(send));
	 }
	}
	if (nChar==VK_DOWN)             //启动小车后退
	{ 
	  if (down_pressed==0) 
	  {
	 
      if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN),_T("Gif")))
         m_gif_rc.Draw();

       m_progress.StepIt();
		down_pressed=1;
	   send_data1[3]='2';	
   	   CByteArray send;
       send.RemoveAll();
	   send.SetSize(5);
       for(i = 0; i <5; i++)
	   send.SetAt(i, send_data1[i]);
	   m_rc_com.SetOutput(COleVariant(send));
	  }
	} 
	if (nChar==VK_LEFT) 
	{ 
		 if (up_pressed==0 && down_pressed==0)    //小车原地左转
		 {
             if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_LEFT_ROVE),_T("Gif")))
               m_gif_rc.Draw();

             m_progress.SetPos(20);
             send_data1[3]='7';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
		 }

		  if (up_pressed==1)    //小车左转
          {
			  if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_LEFT),_T("Gif")))
                m_gif_rc.Draw();

                send_data1[3]='3';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
          }

		  if (down_pressed==1)    //小车后左转
          {
			  if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN_LEFT),_T("Gif")))
            m_gif_rc.Draw();

             send_data1[3]='5';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
          }

	}

		if (nChar==VK_RIGHT) 
	{ 
		 if (up_pressed==0 && down_pressed==0)    //小车原地右转
		 {
			 if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_RITHT_ROV),_T("Gif")))
             m_gif_rc.Draw();
             m_progress.SetPos(20);
             send_data1[3]='8';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
		 }

		  if (up_pressed==1)    //小车右转
          {
			  if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_RIGHT),_T("Gif")))
              m_gif_rc.Draw();

                send_data1[3]='4';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
          }

		  if (down_pressed==1)    //小车后右转
          {
			  if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN_RIGHT),_T("Gif")))
             m_gif_rc.Draw();

             send_data1[3]='6';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
          }
	}

 		if (nChar==VK_SPACE) 
	{ 
		
	}	
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CRCDLG::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	int i;
	if (nChar==VK_UP || nChar==VK_DOWN)              //停止小车
	{
		if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_STOP),_T("Gif")))
         m_gif_rc.Draw();
		m_progress.SetPos(0);
		step=0;
		up_pressed=0;
		down_pressed=0;
		send_data1[3]='0';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));

	}
	
	if (nChar==VK_LEFT || nChar==VK_RIGHT)
	{
		if (up_pressed==0 && down_pressed==0)           //停止小车
		{
			if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_STOP),_T("Gif")))
          m_gif_rc.Draw();
			m_progress.SetPos(0);
			step=0;
          	send_data1[3]='0';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));

		}
			if (up_pressed==1 )           //小车继续前进
		{
          if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_UP),_T("Gif")))
         m_gif_rc.Draw();
         

          	send_data1[3]='1';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));

		}
				if (down_pressed==1 )           //小车继续后退
		{
			if (m_gif_rc.Load(MAKEINTRESOURCE(IDR_GIF_DOWN),_T("Gif")))
         m_gif_rc.Draw();

          	send_data1[3]='2';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));

		}
	}
   
	if (nChar==VK_SPACE)              //小车加速
	{
	
	   
	   if (step<4 && (up_pressed==1 || down_pressed==1)) 
	   {
	    step++;
		m_progress.StepIt();
		send_data1[3]='9';	
   	         CByteArray send;
             send.RemoveAll();
	        send.SetSize(5);
           for(i = 0; i <5; i++)
	       send.SetAt(i, send_data1[i]);
	        m_rc_com.SetOutput(COleVariant(send));
       }
	}
	CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}

void CRCDLG::OPEN_RC_COM()
{
 m_rc_com.SetCommPort(2);
	//m_com.SetInBufferSize(1024);
	//m_com.SetOutBufferCount(512);
	if (!m_rc_com.GetPortOpen()) m_rc_com.SetPortOpen(true);
	m_rc_com.SetInputMode(1);  //设置输入为二进制方式
	m_rc_com.SetSettings("9600,n,8,1");
	m_rc_com.SetRThreshold(1);  //一个字符引发一个事件
	m_rc_com.SetInputLen(0);
}

⌨️ 快捷键说明

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