1、LPC2103系列之无线蓝牙控制小车上位机详细教程LPC2103系列之无线蓝牙串口模块驱动小车第一步:当然是编写上位机程序。下面将详细讲解,至于2103的编写,将在另一篇文档里面,LPC2103系列之无线蓝牙驱动小车程序。 我是个初学者,可能没做好,你可以加我QQ:,我把整个工程发给你。不过要说明哦,不然可能不加。1,首先,你要有一个蓝牙串口模块,如图。它是成对出现的, 一个主机,一个从机,他们是全双工的。如上图,1是从机,2是主机。如果你要用电脑蓝牙配对的话,只能和从机配对。在本实验中,主从机可以调换,不影响。2,。用VC+6.0编写上位机,教程入下。 1。首先打开vc,在文件中选择新建。建
2、立一个工程。Chuankou1。点确定。2,选择基本对话框。点下一步。3.点下一步。4.点下一步。5.点完成。注意,有的选项,不要弄错了哦。6.添加串口控件。点击Insert.然后点确定。确定。在对话框上添加一个组框,在组框中添加5个单选按钮,标题为串口1串口5。(可以根据需要自己增加或删减)。我们给单选串口1添加属性“组”。右键控件,选择属性,修改标题。如下。我们编译一下,看看是否实现了单选的功能。点击Recourse View,展开chuankou1 recourses-Dialog,双击IDD_CHUANKOU1_DIALOG,编辑我们的主界面对话框。双击击“电话”,弹出如下对话框,按确
3、认键:添加按钮控件,编辑框,静态文本。文字说明可以不要。并修改相应的标题。查看-建立类向导MFC ClassWizard-Member Viariable,选择ClassName为CChuankou1Dlg的类,Control ID为MSCOMM1,双击它,为它添加控制变量m_comm1。类似的,选择IDC_BUTTON2添加控制变量m_serial。(注意,BUTTON2对应上图的打开串口,前进对应BUTTON1,后退对应BUTTON4,左转对应BUTTON5,右转对应BUTTON3)。(建立类向导也可以右击然后在弹出的快捷菜单里选择建立类向导)基本框架已经出来了。下面就是程序部分了。回到窗
4、口部分,双击打开串口。添加如下代码;/m_portnum是一个全局变量,用来确定打开哪一个串口。 if(! m_comm1.GetPortOpen()/判断串口是否已经打开 char temp=0; m_comm1.SetCommPort(m_portnum); m_comm1.SetPortOpen(TRUE); /如果串口是关闭的,则打开串口 MessageBox(串口已打开,提示); sprintf(temp,%d,m_portnum); SetDlgItemText(IDC_EDIT1,temp); /更新静态文本控件 m_serial.SetWindowText(关闭串口); /按钮
5、显示状态改变 else m_comm1.SetPortOpen(FALSE); /如果已经打开串口,则关闭串口 MessageBox(串口已关闭,提示); SetDlgItemText(IDC_EDIT1,0); /更新静态文本控件 m_serial.SetWindowText(打开串口);/按钮显示状态改变 在源码编辑里,打开chuankou1Dlg.cpp文件,进行窗口初始化函数的编写。找到BOOL CChuankouDlg:OnInitDialog()函数,在SetIcon(m_hIcon, FALSE); / Set small icon/ TODO: Add extra initia
6、lization here后面添加如下初始化代码: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(串口初始化完毕,提示); /提示串口成功初始化else MessageBox(串口被占用,提示);
7、 /如果已经打开串口,消息框提醒在BOOL CChuankouDlg:OnInitDialog()里面,加上全局变量 m_portnum,代码如下。 m_portnum=1;回到,chuankou1 resources -IDD_CHUANKOU_DIALOG双击 “前进”按钮,点确定。然后添加如下代码:CByteArray m_Array; /定义字节数组m_Array.RemoveAll(); /字节数组清空m_Array.SetSize(1); /设定维数为1m_Array.SetAt(0,0x01); /./ 0x01就是在你点前进按钮的时候,向串口发送的数据。m_comm1.SetO
8、utput(COleVariant(m_Array);/由于SetOutput函数的参数为VARIANT型同理,后退,左转,右转。但是发送的数据不能一样。因为涉及到后面的判断。我设置的是:后退m_Array.SetAt(0,0x02);左转m_Array.SetAt(0,0x03); 右转m_Array.SetAt(0,0x04);再次回到 chuankou1 resources -IDD_CHUANKOU_DIALOG双击 “串口1”单选。点确定。然后添加如下代码:m_portnum=1;其他的同理。如上图;双击 编辑框 点确定。里面不用写代码;当然,到这儿就可以了,但是有的同学想用键盘控制
9、,怎么办。首先到Class View 右键 CChuankou1Dlg 选择添加虚函数 注意:上图的PreTranslateMessge要双击,然后被添加到右边的Existing virrual function everrides 中。展开 CChuankou1Dlg 找到 PreTranslateMessage(MSG*pMsg) 并双击。然后添加如下代码: if (pMsg-message=WM_KEYDOWN) switch (pMsg-wParam) case VK_UP: CByteArray m_Array; /定义字节数组 m_Array.RemoveAll(); /字节数组清
10、空 m_Array.SetSize(1); /设定维数为1 m_Array.SetAt(0,0x01); /给m_array0赋值0 m_comm1.SetOutput(COleVariant(m_Array);/由于SetOutput函数的参数为VARIANT型,必 break; case VK_DOWN: CByteArray m_Array; /定义字节数组 m_Array.RemoveAll(); /字节数组清空 m_Array.SetSize(1); /设定维数为1 m_Array.SetAt(0,0x02); /给m_array0赋值0 m_comm1.SetOutput(COle
11、Variant(m_Array);/由于SetOutput函数的参数为VARIANT型,必 break; case VK_LEFT: CByteArray m_Array; /定义字节数组 m_Array.RemoveAll(); /字节数组清空 m_Array.SetSize(1); /设定维数为1 m_Array.SetAt(0,0x03); /给m_array0赋值0 m_comm1.SetOutput(COleVariant(m_Array);/由于SetOutput函数的参数为VARIANT型,必 break; case VK_RIGHT: CByteArray m_Array; /定义字节数组 m_Array.RemoveAll(); /字节数组清空 m_Array.SetSize(1); /设定维数为1 m_Array.SetAt(0,0x04); /给m_array0赋值0 m_comm1.SetOutput(COleVariant(m_Array);/由于SetOutput函数的参数为VARIANT型,必 break; default : break; 最后,说下功能,也许大家还不是很了解,就是当你按下左键的时候,会向串口发送一个数据,上面有提到。然后,2103接受到这个数据后进行判断。确定应该往那一边转。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2