LPC2103系列之无线蓝牙控制小车上位机详细教程.docx
《LPC2103系列之无线蓝牙控制小车上位机详细教程.docx》由会员分享,可在线阅读,更多相关《LPC2103系列之无线蓝牙控制小车上位机详细教程.docx(17页珍藏版)》请在冰点文库上搜索。
![LPC2103系列之无线蓝牙控制小车上位机详细教程.docx](https://file1.bingdoc.com/fileroot1/2023-5/19/8a1bbf12-4537-4bc8-9d7e-504ea885b159/8a1bbf12-4537-4bc8-9d7e-504ea885b1591.gif)
LPC2103系列之无线蓝牙控制小车上位机详细教程
LPC2103系列之无线蓝牙串口模块驱动小车
第一步:
当然是编写上位机程序。
下面将详细讲解,至于2103的编写,将在另一篇文档里面,LPC2103系列之无线蓝牙驱动小车程序。
我是个初学者,可能没做好,你可以加我QQ:
,我把整个工程发给你。
不过要说明哦,不然可能不加。
1,首先,你要有一个蓝牙串口模块,如图。
它是成对出现的,一个主机,一个从机,他们是全双工的。
如上图,1是从机,2是主机。
如果你要用电脑蓝牙配对的话,只能和从机配对。
在本实验中,主从机可以调换,不影响。
2,。
用VC++6.0编写上位机,教程入下。
1。
首先打开vc,在文件中选择新建。
建立一个工程。
Chuankou1。
点确定。
2,选择基本对话框。
点下一步。
3.点下一步。
4.点下一步。
5.点完成。
注意,有的选项,不要弄错了哦。
6.添加串口控件。
点击Insert.然后点确定。
确定。
在对话框上添加一个组框,在组框中添加5个单选按钮,标题为串口1~串口5。
(可以根据需要自己增加或删减)。
我们给单选串口1添加属性“组”。
右键控件,选择属性,修改标题。
如下。
我们编译一下,看看是否实现了单选的功能。
点击RecourseView,展开chuankou1recourses->Dialog,双击IDD_CHUANKOU1_DIALOG,编辑我们的主界面对话框。
双击击“电话”,弹出如下对话框,按确认键:
添加按钮控件,编辑框,静态文本。
文字说明可以不要。
并修改相应的标题。
查看->建立类向导MFCClassWizard->MemberViariable,选择ClassName为CChuankou1Dlg的类,ControlID为MSCOMM1,双击它,为它添加控制变量m_comm1。
类似的,选择IDC_BUTTON2添加控制变量m_serial。
(注意,BUTTON2对应上图的打开串口,前进对应BUTTON1,后退对应BUTTON4,左转对应BUTTON5,右转对应BUTTON3)。
(建立类向导也可以右击然后在弹出的快捷菜单里选择建立类向导)
基本框架已经出来了。
下面就是程序部分了。
回到窗口部分,双击打开串口。
添加如下代码;
//m_portnum是一个全局变量,用来确定打开哪一个串口。
if(!
m_comm1.GetPortOpen())//判断串口是否已经打开
{
chartemp[]={0};
m_comm1.SetCommPort(m_portnum);
m_comm1.SetPortOpen(TRUE);//如果串口是关闭的,则打开串口
MessageBox("串口已打开","提示");
sprintf(temp,"%d",m_portnum);
SetDlgItemText(IDC_EDIT1,temp);//更新静态文本控件
m_serial.SetWindowText("关闭串口");//按钮显示状态改变
}else{
m_comm1.SetPortOpen(FALSE);//如果已经打开串口,则关闭串口
MessageBox("串口已关闭","提示");
SetDlgItemText(IDC_EDIT1,"0");//更新静态文本控件
m_serial.SetWindowText("打开串口");//按钮显示状态改变
}
在源码编辑里,打开chuankou1Dlg.cpp文件,进行窗口初始化函数的编写。
找到BOOLCChuankouDlg:
:
OnInitDialog()函数,
在SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
后面添加如下初始化代码:
if(!
m_comm1.GetPortOpen())//判断串口是否已经打开
{
m_comm1.SetCommPort(m_portnum);//选择串口号
m_comm1.SetPortOpen(TRUE);//打开串口
m_comm1.SetInputMode
(1);//输入模式选为二进制
m_comm1.SetSettings("9600,n,8,1");//设置串口参数,波特率57600,无奇偶校验,1位停止位,8位数据位
MessageBox("串口初始化完毕","提示");//提示串口成功初始化
}elseMessageBox("串口被占用","提示");//如果已经打开串口,消息框提醒
在BOOLCChuankouDlg:
:
OnInitDialog()里面,加上全局变量m_portnum,代码如下。
m_portnum=1;
回到,chuankou1resources------IDD_CHUANKOU_DIALOG
双击“前进”按钮,点确定。
然后添加如下代码:
CByteArraym_Array;//定义字节数组
m_Array.RemoveAll();//字节数组清空
m_Array.SetSize
(1);//设定维数为1
m_Array.SetAt(0,0x01);/./0x01就是在你点前进按钮的时候,向串口发送的数据。
m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函数的参数为VARIANT型
同理,后退,左转,右转。
但是发送的数据不能一样。
因为涉及到后面的判断。
我设置的是:
后退m_Array.SetAt(0,0x02);左转m_Array.SetAt(0,0x03);右转m_Array.SetAt(0,0x04);
再次回到chuankou1resources------IDD_CHUANKOU_DIALOG
双击“串口1”单选。
点确定。
然后添加如下代码:
m_portnum=1;
其他的同理。
如上图;
双击编辑框点确定。
里面不用写代码;
当然,到这儿就可以了,但是有的同学想用键盘控制,怎么办。
首先
到ClassView右键CChuankou1Dlg选择添加虚函数
注意:
上图的PreTranslateMessge要双击,然后被添加到右边的Existingvirrualfunctioneverrides中。
展开CChuankou1Dlg找到PreTranslateMessage(MSG*pMsg)并双击。
然后添加如下代码:
if(pMsg->message==WM_KEYDOWN)
{
switch(pMsg->wParam)
{
caseVK_UP:
{
CByteArraym_Array;//定义字节数组
m_Array.RemoveAll();//字节数组清空
m_Array.SetSize
(1);//设定维数为1
m_Array.SetAt(0,0x01);//给m_array[0]赋值0
m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函数的参数为VARIANT型,必
}
break;
caseVK_DOWN:
{
CByteArraym_Array;//定义字节数组
m_Array.RemoveAll();//字节数组清空
m_Array.SetSize
(1);//设定维数为1
m_Array.SetAt(0,0x02);//给m_array[0]赋值0
m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函数的参数为VARIANT型,必
}
break;
caseVK_LEFT:
{
CByteArraym_Array;//定义字节数组
m_Array.RemoveAll();//字节数组清空
m_Array.SetSize
(1);//设定维数为1
m_Array.SetAt(0,0x03);//给m_array[0]赋值0
m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函数的参数为VARIANT型,必
}
break;
caseVK_RIGHT:
{
CByteArraym_Array;//定义字节数组
m_Array.RemoveAll();//字节数组清空
m_Array.SetSize
(1);//设定维数为1
m_Array.SetAt(0,0x04);//给m_array[0]赋值0
m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函数的参数为VARIANT型,必
}break;
default:
break;
}
}
最后,说下功能,也许大家还不是很了解,就是当你按下左键的时候,会向串口发送一个数据,上面有提到。
然后,2103接受到这个数据后进行判断。
确定应该往那一边转。