在51hei论坛里看见有好几个用E4A做蓝牙模块与手机通讯的,下载看看,连蓝牙都搜索不到,为此某为此特意献上一款可用的E4A源码以及51单片机源码,特以此供诸位检查及参考,制作多有随意,还请诸位君不要见怪为是!
小车做得有点随意,诸位君可不要介意
前言:此款蓝牙APP为自己在别人的基础上改进而来,主要特点是数据双向传输,单片机端可实现手机控制PWM占空比大小,从而实现无极调速,前后左右等等操作,可以回传单片机端的信号到手机上,只不过偶尔会丢字节,会易安卓的可以多多琢磨。至于说单片机的硬件怎么连接这个就不再多说,可以参考代码来实现硬件的连接!
蓝牙设备显示,搜索到自己的蓝牙后,点击即可连接。
有两种模式切换,超声波模式或蓝牙模式,当然无非就是单片机端怎么编程了!其实每一个按钮都发送一串唯一的数据,在此不累赘!
蓝牙模块可以回传数据到App上,
只不过偶尔会丢字节,这个不知为何,
若有大神,还请赐教!
//==========E4AAPK蓝牙代===============================================================//
变量 分割数据 为 文本型
变量 启动时间 为 长整数型
变量 模式 为 整数型
变量 前灯 为 整数型
事件 按钮6.被单击()
判断 按钮6.标题
分支 "搜索设备"
列表框1.清空项目()
蓝牙1.搜索设备() '搜索设备
弹出提示("正在搜索")
分支 "断开连接"
蓝牙1.断开连接() '退出处理,释放资源,结束内部处理线程
丰富文本框1.内容=""
编辑框1.内容=""
编辑框2.内容=""
速度调节.位置=50
按钮6.标题="搜索设备"
结束 判断
结束 事件
事件 主窗口.按下某键(键代码 为 整数型,传址 屏蔽 为 逻辑型)
如果 键代码 = 返回键 则
如果 取启动时间() - 启动时间 >2000 则
弹出提示("再按一次退出程序")
启动时间 = 取启动时间()
否则
结束程序()
结束 如果
结束 如果
结束 事件
事件 主窗口.创建完毕()
列表框1.字体大小 = 6
标签1.背景颜色=无色
列表框1.背景颜色=绿色
模式=0
前灯=0
蓝牙1.是否存在()
判断 蓝牙1.是否存在()
分支 假
弹出提示("没有检测到蓝牙设备,程序将关闭")
结束程序()
分支 真
判断 蓝牙1.是否已开启()
分支 假
蓝牙1.开启蓝牙()
结束 判断
结束 判断
保存窗口("主窗口",本对象) '本对象是当前窗口
保存窗口("窗口1",创建 窗口1)
结束 事件
事件 蓝牙1.发现设备(设备名称 为 文本型,设备地址 为 文本型,是否已配对 为 逻辑型)
列表框1.添加项目(设备名称 & "/" & 设备地址 & "/" & 是否已配对)
结束 事件
事件 列表框1.表项被单击(项目索引 为 整数型)
变量 设备信息 为 文本型
变量 文本数组 为 文本型()
变量 设备地址 为 文本型
设备信息 = 列表框1.取项目内容(项目索引)
文本数组 = 分割文本(设备信息,"/")
设备地址 = 文本数组(1)
弹出提示(设备地址)
蓝牙1.连接设备(设备地址) '连接设备 我看了有些例程是没有的
弹出提示("正在连接")
蓝牙1.停止搜索()
结束 事件
事件 蓝牙1.连接完毕(连接结果 为 逻辑型,设备名称 为 文本型,设备地址 为 文本型,连接模式 为 整数型)
变量 设备信息 为 文本型
变量 文本数组 为 文本型()
如果 连接结果 = 真 则
标签1.标题 = "已连接:" & 设备名称 & "-" & 设备地址
按钮6.标题="断开连接"
弹出提示("连接成功")
否则
弹出提示("连接失败")
标签1.标题 = "已断开"
按钮6.标题="搜索设备"
结束 如果
结束 事件
事件 蓝牙1.蓝牙设置完毕(设置结果 为 整数型)
判断 设置结果
分支 1 '开启蓝牙
弹出提示("蓝牙已开启")
蓝牙1.置可被发现() '置可被发现
分支 2 '不开启蓝牙
信息框("信息","蓝牙未被开启,程序将退出!","确定")
结束程序()
分支 3 '置可被发现
弹出提示("蓝牙已设置为可被发现")
蓝牙1.置工作模式(2) '蓝牙聊天模式
分支 4 '不置可被发现
信息框("信息","蓝牙未被设置为可被发现,程序将退出!","确定")
结束程序()
结束 判断
结束 事件
事件 按钮1.被按下(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@lefth","GBK"))
结束 事件
事件 按钮1.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@stoph","GBK"))
结束 事件
事件 按钮2.被按下(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@ahead","GBK"))
结束 事件
事件 按钮2.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@stoph","GBK"))
结束 事件
事件 按钮3.被按下(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@right","GBK"))
结束 事件
事件 按钮3.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@stoph","GBK"))
结束 事件
事件 按钮4.被按下(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@backh","GBK"))
结束 事件
事件 按钮4.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@stoph","GBK"))
结束 事件
事件 按钮5.被单击()
蓝牙1.发送数据(文本到字节("@stoph","GBK"))
结束 事件
事件 按钮7.被单击()
蓝牙1.发送数据(文本到字节("@sgetd","GBK"))
结束 事件
事件 按钮9.被单击()
判断 前灯
分支 0
前灯=1
蓝牙1.发送数据(文本到字节("@ligh1","GBK"))
按钮9.标题="前灯开"
分支 1
前灯=0
蓝牙1.发送数据(文本到字节("@ligh0","GBK"))
按钮9.标题="前灯关"
结束 判断
结束 事件
事件 按钮10.被按下(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@load0","GBK"))
结束 事件
事件 按钮10.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
蓝牙1.发送数据(文本到字节("@load1","GBK"))
结束 事件
事件 按钮8.被单击()
判断 模式
分支 0
按钮8.标题="蓝牙模式"
蓝牙1.发送数据(文本到字节("@mosh1","GBK"))
模式=1
分支 1
按钮8.标题="超声波模式"
蓝牙1.发送数据(文本到字节("@mosh0","GBK"))
模式=0
结束 判断
结束 事件
事件 速度调节.位置被改变(位置 为 整数型)
如果 位置>9 且 位置<100 则
蓝牙1.发送数据(文本到字节("@spe"&整数到文本(位置),"GBK"))
结束 如果
结束 事件
事件 蓝牙1.收到数据(数据 为 字节型(),设备名称 为 文本型,设备地址 为 文本型)
变量 收到数据 为 文本型
分割数据=字节到文本(数据,"GBK")
丰富文本框1.内容 =丰富文本框1.内容 & "\r\n " & 字节到文本(数据,"GBK")
丰富文本框1.置光标位置(取文本长度(丰富文本框1.内容))
如果 寻找文本(分割数据,"rp",0) >0 则
' 标签2.标题=取文本中间(分割数据,2 ,4) &"m/s"
' 结束 如果
' 如果 寻找文本(分割数据,"dt",0) >= 0 则
' 标签3.标题=取文本中间(分割数据,2 ,4) &"cm"
如果 寻找文本(分割数据,"dt",0) >0 则
编辑框1.内容=取指定文本2(分割数据,"dt","cm")
结束 如果
如果 寻找文本(分割数据,"sp",0) >0 则
编辑框2.内容=取指定文本2(分割数据,"sp","ms")
结束 如果
'标签2.标题="速度:"&分割数据 &"m/s"
' 否则如果 寻找文本(分割数据,"dt",0) >= 0 则
' 分割数据= 取文本右边(分割数据,3)
' 标签3.标题="距离:"&分割数据 &"cm"
结束 如果
'=====================以下是接收单片机发送过来的16进制HEX数据的方法=======================
' 变量 计次 为 整数型
' 判断循环首 计次 < 取数组成员数(数据)
' 编辑框1.内容 = 编辑框1.内容 & " " & 到十六进制(数据(计次))
' 计次 = 计次 + 1
' 判断循环尾
结束 事件
'事件 编辑框1.内容被改变(新内容 为 文本型)
'
'结束 事件
事件 丰富文本框1.内容被改变(新内容 为 文本型)
结束 事件
事件 标签1.被单击()
结束 事件
事件 标签2.被单击()
结束 事件
事件 按钮11.被单击()
如果 读取窗口("窗口1")=空 则
保存窗口("窗口1",创建 窗口1)
结束 如果
切换窗口(读取窗口("窗口1"))
结束 事件
全部资料51hei下载地址:
蓝牙小车apk、51单片机源代码.rar
(1.24 MB, 下载次数: 568)
|