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

📄 commdialog.cpp

📁 基于视觉的道路识别技术的智能小车导航源代码
💻 CPP
字号:
// CommDialog.cpp : implementation file
//

#include "stdafx.h"
#include "AGV.h"
#include "CommDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCommDialog dialog


CCommDialog::CCommDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CCommDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCommDialog)
	m_strTXData = _T("");
	m_strRXData = _T("");
	m_bAutoSend = FALSE;
	//}}AFX_DATA_INIT
}


void CCommDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCommDialog)
	DDX_Text(pDX, IDC_EDIT_TXDATA, m_strTXData);
	DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData);
	DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
	DDX_Check(pDX, IDC_CHECK_AUTOSEND, m_bAutoSend);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCommDialog, CDialog)
	//{{AFX_MSG_MAP(CCommDialog)
	ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_CHECK_AUTOSEND, OnCheckAutosend)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCommDialog message handlers

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





BOOL CCommDialog::Create()
{
   	return CDialog::Create(CCommDialog::IDD);
}

void CCommDialog::OnComm() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;
    if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
    {             ////////以下你可以根据自己的通信协议加入处理代码
        variant_inp=m_ctrlComm.GetInput(); //读缓冲区
        safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度
        for(k=0;k<len;k++)
            safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        for(k=0;k<len;k++) //将数组转换为Cstring型变量
        {
            BYTE bt=*(char*)(rxdata+k); //字符型
            strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
            m_strRXData+=strtemp; //加入接收编辑框对应字符串 
        }
    }
    UpdateData(FALSE); //更新编辑框内容

}

BOOL CCommDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
    if(m_ctrlComm.GetPortOpen())
     m_ctrlComm.SetPortOpen(FALSE);
     m_ctrlComm.SetCommPort(4); //选择com4
    if( !m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(TRUE);//打开串口
    else
   AfxMessageBox("cannot open serial port");
   m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位 
   m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
   m_ctrlComm.SetRThreshold(1); 
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
   m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
   m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据


	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CCommDialog::OnButtonManualsend() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE); //读取编辑框内容
    m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据

}

void CCommDialog::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	OnButtonManualsend();
	CDialog::OnTimer(nIDEvent);
}

void CCommDialog::OnCheckAutosend() 
{
	// TODO: Add your control notification handler code here
	m_bAutoSend=!m_bAutoSend;
   if(m_bAutoSend)
   {
    SetTimer(1,1000,NULL);//时间为1000毫秒
   }
 else
 {
   KillTimer(1);  //取消定时
 }

}

⌨️ 快捷键说明

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