成功实现手机蓝牙控制智能小车机器人!视频+程序源代码(Android)

合集下载

基于Android的智能小车控制及路径规划

基于Android的智能小车控制及路径规划
基于Android的智能小车控制及路径规 划
目录
01 一、智能小车控制
02 二、路径规划
03 三、Android开发
04 四、传感器应用
05 五、实例分析
随着科技的快速发展,智能小车已经成为了人们研究的热点领域之一。基于 Android系统的智能小车控制及路径规划更是备受。本次演示将介绍智能小车 控制的基本原理、路径规划的方法,以及如何在Android系统中实现这些功能。
1、A*算法
A算法是一种经典的图搜索算法,它通过评估代价函数来找出从起点到终点的 最短路径。在Android系统中,我们可以使用A算法来实现小车的路径规划。 首先,将小车的行驶环境转化为二维网格图,每个网格点表示一个地理位置。 然后,从小车的起点开始搜索,依次遍历周围的网格点,并计算代价函数,直 到找到终点为止。
2、代码开发
代码开发是Android开发的核心环节,它包括应用程序的开发和底层驱动程序 的编写。在智能小车的控制及路径规划中,我们需要通过代码实现无线通在智能小车的控制及路径规划中起着至关重要的作用。通过内置或外接 传感器,Android系统可以获取小车及周围环境的实时信息,从而实现自动控 制和路径规划。
2、Dijkstra算法
Dijkstra算法也是一种常用的图搜索算法,它通过逐步扩展节点来找出从起 点到各个节点的最短路径。在Android系统中,我们可以使用Dijkstra算法来 实现小车的路径规划。首先,将小车的行驶环境转化为二维网格图,每个网格 点表示一个地理位置。然后,从小车的起点开始扩展,逐步遍历周围的网格点, 并计算代价函数,直到所有节点都被遍历为止。
三、Android开发
Android开发是基于Java或Kotlin语言进行的,它包括界面设计、代码开发等 环节。在智能小车的控制及路径规划中,Android开发可以为其提供强大的功 能和智能化。

基于Android平台的无线遥控智能小车

基于Android平台的无线遥控智能小车

基于Android平台的无线遥控智能小车朱丹峰;葛主冉;林晓雷【摘要】Design the hardware and software in the Android-based intelligent car with wireless remote control.The system has two kinds of remote control ways:Bluetooth and WiFi.As for the hardware,the system takes STC12C5A60S2 singlechip as the core,others is mainly composed by the Android devices,power supply modules,DC motor drivermodule,tracking module,obstacle avoidance module,light-searching module,WiFi module and camera module.Regarding the software,complete the programming of Android device in the upper computer and singlechip in the lower computer.After comparing the programs and testing the relevant parameters,the results show that the system of the intelligent car is stable and it can achieve the desired goals by perfectly performing functions of wireless remote control,tracking,obstacle avoidance,light-searching,video monitoring and so on.%设计基于Android平台的无线遥控智能小车的软硬件.该系统具有蓝牙和WiFi两种遥控方式.在硬件方面,该系统以STC12C5A60S2单片机为核心,其他主要由Android设备、稳压电源模块、直流电机驱动模块、循迹模块、避障模块、寻光模块、蓝牙模块、WiFi模块及摄像头模块等组成.在软件方面,完成了上位机Android设备程序、下位机单片机程序的编写.经过方案的对比,相关参数的测试,实验结果表明该智能小车系统稳定,能完成无线遥控、循迹、避障、寻光、视频监控等功能,达到预期目标.【期刊名称】《电子器件》【年(卷),期】2013(036)003【总页数】5页(P408-412)【关键词】Android;WiFi;蓝牙;单片机;监控;智能小车【作者】朱丹峰;葛主冉;林晓雷【作者单位】温州医学院生物医学工程系,浙江温州325035;温州医学院生物医学工程系,浙江温州325035;温州医学院生物医学工程系,浙江温州325035【正文语种】中文【中图分类】TP242.6目前,蓝牙和WiFi技术得到了空前广泛的应用,使用蓝牙和WiFi的产品非常多,如手机、电脑、汽车、游戏设备和医疗设备等。

基于Android手机蓝牙控制的智能小车设计

基于Android手机蓝牙控制的智能小车设计

基于Android手机蓝牙控制的智能小车设计汤莉莉;黄伟【摘要】This design is based on the Android,and provides a new research method for wireless smart car control by means of the bluetooth communication technology. With more and more wide use of Bluetooth in people's lives,a wireless smart car controlled by Bluetooth was designed in combination with of Bluetooth,wireless electronictechnology,microcontroller tech⁃nology and Android mobile intelligent terminal platform,as well as car hardware. The forward move,backward move,right front turn,left front turn,right rear turn,left rear turn and other functions of the smart car were achieved with bluetooth controltech⁃nology. In the course of the car moving,the car’s movement state can be controlled and changed by means of APP interfacebut⁃ton,gravity,voice through the Android mobile client. It provides a new design method for vehicle⁃mounted electronics for wire⁃less communication. It also provides a certain reference significance for the future design of wireless car and modern smart home.%基于Android平台,借助于蓝牙通信技术,为无线智能小车的设计提供一种新的研究方法。

蓝牙(NXT)机器人编程指导

蓝牙(NXT)机器人编程指导

应用领域及前景
• 教育领域:蓝牙(NXT)机器人可以作为教育工具,帮助学生了解机器人技术和编程知识。通过搭建和编程蓝牙 (NXT)机器人,学生可以培养动手能力和创新思维。
• 研究领域:蓝牙(NXT)机器人可以作为研究平台,用于研究机器人技术、人工智能等领域的前沿问题。研究人 员可以通过对蓝牙(NXT)机器人的改进和优化,推动相关技术的发展。
优化算法实现
对所选算法进行优化,包 括改进算法逻辑、减少计 算复杂度、提高代码执行 效率等方面。
性能评估与调优
通过性能测试和评估,发 现程序中存在的性能瓶颈 ,并针对性地进行优化和 调整。
错误处理与调试技巧
错误处理机制
建立完善的错误处理机制,包括错误检测、错误报告和错 误恢复等方面,以确保程序在出现异常情况时能够及时处 理并恢复正常运行。
感谢您的观看
调试与测试方法
使用LEGO MINDSTORMS NXT软件进行调试
该软件提供了实时数据监控和调试功能,方便用户查看和修改机器人状态。
使用蓝牙进行远程调试
通过蓝牙连接,将程序下载到NXT机器人上,进行实际运行测试。
日志记录与分析
在程序中添加日志记录功能,将机器人运行状态和相关数据记录下来,以便后续分析和 优化。
03
使用Python语言编程,易于学习和使用,同时拥有强大的库支
持和跨平台兼容性。
基本语法和编程规范
01
02
03
04
程序结构
了解主程序、子程序和中断服 务程序的概念及其在组织程序
中的作用。
语法规则
学习并掌握所选编程语言的基 本语法规则,如语句、表达式
、控制结构等。
命名规范
采用有意义的变量名和函数名 ,提高代码可读性和可维护性

蓝牙小车原理

蓝牙小车原理

蓝牙小车原理蓝牙小车是一种基于蓝牙通信技术的智能小车,它可以通过蓝牙与手机或其他设备进行连接,实现远程控制和数据传输。

在这篇文档中,我们将介绍蓝牙小车的原理及其工作方式。

首先,蓝牙小车的核心部件是蓝牙模块。

蓝牙模块是一种集成了蓝牙通信协议的硬件设备,它可以实现与其他蓝牙设备的无线通信。

在蓝牙小车中,蓝牙模块负责与手机或其他设备进行连接,接收控制指令并将其转换为小车的运动控制信号。

其次,蓝牙小车通常配备有多个传感器,如红外线传感器、超声波传感器等。

这些传感器可以实时感知周围环境的信息,并将其转化为电信号,传输给控制系统。

通过这些传感器,蓝牙小车可以实现避障、跟随等智能功能。

另外,蓝牙小车还包括电机驱动模块。

电机驱动模块负责控制小车的轮子转动,从而实现小车的前进、后退、转向等动作。

通过蓝牙模块接收到的控制指令,电机驱动模块可以精确地控制小车的运动。

除此之外,蓝牙小车还需要一个控制系统来整合各个部件的功能。

控制系统通常由单片机或嵌入式系统构成,它接收蓝牙模块传来的控制指令,再根据传感器的反馈信息和预设的算法进行运算,最终输出控制信号给电机驱动模块,实现小车的运动控制。

综上所述,蓝牙小车的原理是通过蓝牙模块与手机或其他设备进行连接,接收控制指令并将其转换为小车的运动控制信号;通过传感器感知周围环境的信息,并将其转化为电信号传输给控制系统;通过电机驱动模块控制小车的轮子转动,实现小车的运动;最后,通过控制系统整合各个部件的功能,实现蓝牙小车的智能控制和运动功能。

希望通过本文档的介绍,读者对蓝牙小车的原理有了更深入的了解,为后续的设计和应用提供了一定的参考和帮助。

基于安卓手机蓝牙控制的智能小车设计

基于安卓手机蓝牙控制的智能小车设计

基于安卓手机蓝牙控制的智能小车设计智能小车是一种集成了多种智能技术的机械装置,可以通过蓝牙控制进行操作。

本文将基于安卓手机蓝牙控制的智能小车设计进行详细介绍。

1.设计背景和目标智能小车是近年来智能家居和物联网技术的热门应用之一、本设计旨在通过安卓手机蓝牙控制,实现对小车的远程操控,并能够获取小车的状态数据。

2.硬件设计本设计所需的硬件主要有:安卓手机、Arduino控制器、蓝牙模块、直流电机和车轮。

2.1 Arduino控制器Arduino控制器作为智能小车的主控,负责接收蓝牙模块发送的指令,并控制直流电机完成相应的运动。

2.2蓝牙模块蓝牙模块负责与安卓手机进行通信。

当用户在手机上发送指令时,蓝牙模块将指令通过串口发送给Arduino控制器。

2.3直流电机和车轮直流电机是智能小车的推动力源,通过车轮将电机的转动转化为小车的运动。

可以根据实际需要选择单个电机或多个电机的配置。

3.软件设计本设计主要涉及两个方面的软件设计:安卓手机控制应用和Arduino控制程序。

3.1安卓手机控制应用安卓手机控制应用是用户与智能小车交互的界面。

用户可以通过应用界面发送指令给小车,控制其前进、后退、转向等行为。

应用还可以显示小车的实时状态数据,例如电池电量、速度等。

3.2 Arduino控制程序Arduino控制程序是小车的控制逻辑,通过与蓝牙模块的通信接收指令,并控制直流电机完成相应的动作。

可以根据用户指令的不同,控制电机正转、反转或停止。

4.系统功能本设计的智能小车主要具备以下功能:1)远程控制:通过安卓手机控制应用,用户可以远程控制小车的行动。

2)实时数据显示:应用可以显示小车的实时状态数据,方便用户了解小车的工作状态。

3)电量提醒:当小车的电池电量低于设定值时,应用将会提醒用户及时充电。

4)编程扩展性:用户可以通过简单的编程方式扩展小车的功能,例如添加避障传感器、红外遥控等模块。

5)兼容性:本设计兼容大多数安卓手机,并且可以与其他智能设备进行蓝牙通信。

51单片机智能小车蓝牙遥控+测速程序源代码、电路原理图和电路器件表

51单片机智能小车蓝牙遥控+测速程序源代码、电路原理图和电路器件表

51单片机智能小车蓝牙遥控+测速程序源代码、电路原理图、电路器件表HC-05蓝牙模块测速模块智能小车蓝牙遥控+测速是:可以用智能小车手机蓝牙遥控APP 控制智能小车的前进,后退,左转,右转和停止。

同时利用测速模块测量智能小车的运动速度,并将智能小车的速度显示在液晶屏上。

智能小车蓝牙遥控+测速程序流程图如下:下文主要提供了51单片机智能小车蓝牙遥控+测速完整程序源代码、电路原理图以及电路器件表。

智能小车核心板原理图STC15W4K56S4智能小车核心板器件(BOM)表实物图060306030603PIN插针PIN2x1406030603直插LQFP7x7-48 STC15W4K56S4智能小车核心板正面STC15W4K56S4智能小车核心板背面智能小车驱动板原理图51单片机(STC15W4K56S4)智能小车驱动板器件(BOM)表实物图直插直插直插直插直插直插直插直插直插直插PIN与PIN之间的间隔2.54mm插电池盒PIN与PIN间隔2.54mm,插电机3PIN插针,针与针间隔2.54mm插舵机红色插针和黑色插针3.3V红色插针、GND黑色插针PIN红色插针和黑色插针5V PIN红色插针和黑色插针VINPIN与PIN之间的间隔2.54mm 插MQ2模块针与针间隔2.54mm插GP2Y1014AU模块针与针间隔2.54mm语音播报实验时,串口4插语音播报模块针与针间隔2.54mmIO扩展用,没有必要不要焊接针与针间隔2.54mm插DHT11模块用4PIN插针,针与针间隔2.54mm用杜邦线连接超声波模块针与针间隔2.54mm插蓝牙模块(要原厂原装的)用8PIN插针,针与针间隔2.54mm杜邦线连接红外循迹避障模块用4PIN插针,针与针间隔2.54mm用杜邦线连接测速模块针与针间隔2.54mm插5V的LCD1602液晶MPU6050不要焊接。

也可以用导线直接将但一定要注意不要短接直插直插直插电阻直插直插电阻这直插电阻直插电阻电阻电阻5V3.3V5V红外遥控信号接收管直插针与针间隔2.54mm,插MPU6050模块,目前只是在电路图上保留了该接口,并无相关实验程序。

蓝牙智能小车的原理

蓝牙智能小车的原理

蓝牙智能小车的原理硬件原理:1.主控制器:主控制器是智能小车的大脑,负责解析接收到的指令并控制电机的转动。

主控制器中通常包含一个具有处理能力的微控制器单元(MCU),由它负责整个系统的控制和运算。

2.电机驱动:电机驱动模块负责将主控制器传来的信号转化为电机能够接收的电流和电压,实现电机的正转、反转或停止。

3.电源系统:为了供给小车的各个模块和电机驱动模块所需的电能,蓝牙智能小车通常需要一个电源系统,可以使用电池或者外部电源供电。

软件原理:1.蓝牙通信:主控制器通过配备的蓝牙模块与手机或电脑进行通信。

当手机或电脑上的蓝牙设备到智能小车时,可以通过连接和配对的方式建立起通信。

2.指令解析:蓝牙模块接收到手机或电脑发送的指令后,传递给主控制器进行解析。

主控制器根据指令的不同,识别指令的类型并进行相应的处理,例如转动电机、改变小车的方向等。

3.控制信号输出:主控制器根据指令解析的结果,将处理后的控制信号输出给电机驱动,通过控制电机驱动的转动方式,实现小车的运动。

1.手机或电脑通过蓝牙与小车建立连接,并通过特定的应用程序发送控制指令。

2.小车的蓝牙模块接收到指令后,将指令传递给主控制器。

3.主控制器解析指令后,根据指令的内容控制电机驱动模块的工作。

4.电机驱动模块根据主控制器的指令控制电机的转动方向和速度,从而控制小车的运动。

5.用户通过手机或电脑的操作界面不断发送指令,控制小车的移动、停止或拐弯等。

总结:蓝牙智能小车的原理主要包括硬件和软件两个方面。

硬件部分包括主控制器、电机驱动和电源系统,软件部分包括蓝牙通信、指令解析和控制信号输出。

通过手机或电脑与小车的蓝牙设备建立连接,并通过应用程序发送指令,控制小车的运动。

蓝牙智能小车的原理可使用户通过手机或电脑实现对小车的无线控制,为用户带来更好的体验。

基于51单片机的手机蓝牙遥控小车设计(程序元件清单实物图)

基于51单片机的手机蓝牙遥控小车设计(程序元件清单实物图)

基于51单片机的手机蓝牙遥控小车设计(程序元件清单实物图)本人一直想做一个遥控车,终于今天实现了,跟大家分享一下。

一、元件清单1、某宝购买一个智能小车底盘(本人车是四驱的,因此有四个电机,两块亚克力板和一些配件螺丝)2、L298n模块两个(一个298控制两个电机)3、HC-06蓝牙模块4、电池盒跟18650电池3个5、单片机最小系统6、杜邦线至少12根,当然越多越好7、若干根导线(连接电机用的,以及电池盒连到L298N跟单片机)二、制作过程首先,先去了解一下L298N的接线,我当时也是懵逼了好久,反正摸索着也会了,一般店家都有资料。

然后是蓝牙模块的使用,拿到蓝牙模块后,有开发板的话(没有就用单片机的烧录器),先按照TXD接TXD,RXD接RXD,打开电脑的串口助手与蓝牙构建通信,打开AT,发送AT指令集,比如设设波特率,改个名字,改个配对的密码。

但通过蓝牙与单片机连接通信的时候,就是TXD接RXD了。

最后一个就是,本人在接线的时候经常碰壁。

比如,你以为接好的线他其实没接好,根本没通,还是拿万用表B了才知道。

因为本人忘了买电池盒,所以我是用12V的直流电接着的,导致遥控车拖着跟电线。

三、实物图(拖着跟电线以及充电宝供电的车不过我没通电)资料内包括L298N的部分资料,以及蓝牙的说明书(看AT指令集就好)和源程序。

app:单片机源程序如下:1./*手机蓝牙遥控小车 APP可以在应用市场搜蓝牙串口助手2.左转右转大概是90度我的是四驱的,如果是只有一个l298N 的话就把带2的删了3.pwm有十级变速*/4.5.6.#include <reg52.h>7.8.#define Left_moto2_pwm P0_4 //接驱动模块ENA 使能端,输入PWM信号调节速度左后轮9.#define Right_moto2_pwm P0_5 //接驱动模块ENB 右后轮10.#define Left_moto_pwm P1_4 //接驱动模块ENA 使能端,输入PWM信号调节速度左前轮11.#define Right_moto_pwm P1_5 //接驱动模块ENB 右前轮12.#define uchar unsigned char13.#define uint unsigned int14.15.sbit P0_4=P0^4; //定义P0_416.sbit P0_5=P0^5; //定义P0_517.sbit P1_4=P1^4; //定义P1_418.sbit P1_5=P1^5; //定义P1_519.20./*电机驱动IO定义*/21.sbit IN1 = P1^2; //为1 左电机反转前轮22.sbit IN2 = P1^3; //为1 左电机正转前轮23.sbit IN3 = P1^6; //为1 右电机正转前轮24.sbit IN4 = P1^7; //为1 右电机反转前轮25./*sbit EN1 = P1^4; //为1 左电机使能26.sbit EN2 = P1^5; //为1 右电机使能 */27.28.sbit IN5 = P0^2; //为1 左电机反转后轮29.sbit IN6 = P0^3; //为1 左电机正转后轮30.sbit IN7 = P0^6; //为1 右电机正转后轮31.sbit IN8 = P0^7; //为1 右电机反转后轮32./*sbit EN3 = P0^4; //为1 左电机使能后轮33.sbit EN4 = P0^5; //为1 右电机使能后轮 */34.35.bit Right_moto_stop=1;36.bit Left_moto_stop =1;37.unsigned int time=0;38.int pwm=1;39.40.#define left_motor_en EN1 = 1 //左电机使能41.#define left_motor_stops EN1 = 0 //左电机停止42.#define right_motor_en EN2 = 1 //右电机使能43.#define right_motor_stops EN2 = 0 //右电机停止44.45.#define left_motor2_en EN3 = 1 //左电机使能后46.#define left_motor2_stops EN3 = 0 //左电机停止后47.#define right_motor2_en EN4 = 1 //右电机使能后48.#define right_motor2_stops EN4 = 0 //右电机停止后49.50.51.#define left_motor_go IN1 = 0, IN2 = 1//左电机正传52.#define left_motor_back IN1 = 1, IN2 = 0//左电机反转53.#define right_motor_go IN3 = 1, IN4 = 0//右电机正传54.#define right_motor_back IN3 = 0, IN4 = 1//右电机反转55.56.#define left_motor2_go IN5 = 0, IN6 = 1//左电机正传57.#define left_motor2_back IN5 = 1, IN6 = 0//左电机反转58.#define right_motor2_go IN7 = 1, IN8 = 0//右电机正传59.#define right_motor2_back IN7 = 0, IN8 = 1//右电机反转60.61.unsigned char pwm_val_left =0;//变量定义62.unsigned char push_val_left =0;// 左电机占空比N/1063.unsigned char pwm_val_right =0;64.unsigned char push_val_right=0;// 右电机占空比N/1065.66.67.void delay(uint z)68.{69.uint x,y;70.for(x = z; x > 0; x--)71.for(y = 114; y > 0 ; y--);72.}73.74.75.76.//蓝牙初始化77.void UART_INIT()78.{79.SM0 = 0;80.SM1 = 1;//串口工作方式181.REN = 1;//允许串口接收82.EA = 1;//开总中断83.ES = 1;//开串口中断84.TMOD = 0x20;//8位自动重装模式85.TH1 = 0xfd;86.TL1 = 0xfd;//9600波特率87.TR1 = 1;//启动定时器188.}89.90./************************************************************************/91.void run(void) //pwm调速函数92.{93.push_val_left =pwm; //PWM 调节参数1-10 1为最慢,10是最快改这个值可以改变其速度94.push_val_right =pwm; //PWM 调节参数1-10 1为最慢,10是最快改这个值可以改变其速度95.if(pwm==10) pwm=0;96.if(pwm==0&&pwm<0) pwm=0;97.98.}99.100.101./******************************************************** ****************/102./* PWM调制电机转速 */ 103./******************************************************** ****************/104.105.106./* 左侧电机调速 */107./*调节push_val_left的值改变电机转速,占空比 */108.void pwm_out_left_moto(void)109.{110.if(Left_moto_stop)111.{112.if(pwm_val_left<=push_val_left)113.{ Left_moto_pwm=1;114.Left_moto2_pwm=1; }115.else116.{ Left_moto_pwm=0;Left_moto2_pwm=0; }117.118.if(pwm_val_left>=10)119.pwm_val_left=0;120.}121.else { Left_moto_pwm=0;Left_moto2_pwm=0; }122.}123./******************************************************** **********/124./* 右侧电机调速 */125.void pwm_out_right_moto(void)126.{127.if(Right_moto_stop)128.{129.if(pwm_val_right<=push_val_right)130.{ Right_moto_pwm=1;131.Right_moto2_pwm=1; }132.else133.{Right_moto_pwm=0;134.Right_moto2_pwm=0;}135.if(pwm_val_right>=10)136.pwm_val_right=0;137.}138.else {Right_moto_pwm=0;Right_moto2_pwm=0; } 139.}140./***************************************************/141.///*TIMER0中断服务子函数产生PWM信号*/142.void timer0()interrupt 1 using 2143.{144.TH0=0XF8; //1Ms定时145.TL0=0X30;146.time++;147.pwm_val_left++;148.pwm_val_right++;149.pwm_out_left_moto();150.pwm_out_right_moto();151.}152.153.//小车前进154.void forward()155.{156.ET0 = 1;157.run(); //pwm 程序158.left_motor_go; //左电机前进159.right_motor_go; //右电机前进160.left_motor2_go; //左电机前进后轮161.right_motor2_go; //右电机前进后轮162.}163.164.void left_go() //左转165.{166.ET0 = 1;167.run();168.left_motor_back;169.right_motor_go;170.left_motor2_back;171.right_motor2_go;172.delay(700);173.forward();174.}175.//右转176.void right_go()177.{178.ET0 = 1;179.run();180.delay(50);181.right_motor_back;182.left_motor_go;183.right_motor2_back;184.left_motor2_go;185.delay(700);186.forward();187.}188.//小车左转圈189.void left()190.{191.ET0 = 1;192.run();193.delay(50);194.right_motor_go; // 右电机前进195.left_motor_back; // 左电机后退196.right_motor2_go; // 右电机前进197.left_motor2_back; // 左电机后退198.}199.200.//小车右转圈201.void right()202.{203.ET0 = 1;204.run();205.left_motor_go;206.right_motor_back;207.left_motor2_go;208.right_motor2_back; 209.}210.211.//小车后退212.void back()213.{214.ET0 = 1;215.run();216.left_motor_back;217.right_motor_back; 218.left_motor2_back;219.right_motor2_back; 220.}221.222.//小车停止223.void stop()224.{225.ET0 = 0;226.P1=0;227.P0=0;228.}229.230.231.//串口中断232.void UART_SER() interrupt 4 233.{234.if(RI)236.RI = 0;//清除接收标志237.switch(SBUF)238.{239.case 'g': forward(); break;//前进240.case 'b': back(); break;//后退241.case 'l': left(); break;//左转圈242.case 'r': right(); break;//右转圈243.case 's': stop(); break;//停止244.case 'z': left_go(); break;//左转行驶245.case 'y': right_go(); break;//右转行驶246.case 'p': pwm++;break; //加速247.case 'c': pwm--;break; //减速248.}249.250.}251.}252.253.void main()254.{255.TMOD=0X01;256.TH0= 0XF8; //1ms定时257.TL0= 0X30;258.TR0= 1;259.ET0= 1;260.EA = 1;261.UART_INIT();//串口初始化262.while(1);263.}264.。

手机APP通过蓝牙的实现与控制

手机APP通过蓝牙的实现与控制

第五章APP的实现与控制随着移动互联网的快速崛起,手机客户端应用软件(Application,简称APP)为代表的智能终端应用的快速普及,给人们的工作和生活带来了更多的便捷,也加快了物联网的发展步伐。

Android系统作为手机的主流操作系统,由于其操作性和开源性,为手机应用程序控制系统的开发提供了很大的优势,并将各类控制系统融为一体提供了可能。

本部分以Android手机应用程序APP为客户端,借助蓝牙无线通信技术,智能小车作为服务器端接收手机的控制信号,并实现小车的相关动作。

该设计为智能控制方式提供一种新的设计思路。

系统结构图如图5-1所示:图5-1 系统结构图5.1 主要技术Java作为一种完全面向对象的语言,拥有安全、健壮、分布、可移植等多种优点。

正是这些优点让Java在很多领域都有广泛的应用。

从商业上的电子商务网站到安卓App,从科学应用到经济应用,如电子交易系统,从游戏到桌面应用都有Java的身影。

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。

智能手机的发展自然离不开智能操作系统的不断进化,安卓作为手机操作系统的一种,因为其开放的源码特性以及营销模式迅速占领市场。

5.2 安卓系统5.2.1 基本架构在安卓系统中,将操作系统的体系结构分为四层,从下到上分别为Linux内核层、系统运行库层、应用框架层和应用层。

安卓体系结构如图5-2所示。

图5-2 安卓体系结构图(1)Linux层:安卓操作系统的底层是基于Linux Kernel 的,其功能主要是负责操作系统所具有的功能,包括很多的驱动程序,如显示驱动、相机驱动、蓝牙驱动等,正是这些驱动程序来驱动我们的硬件设备。

(2)系统运行库层:系统运行库层包括两个部分:库文件和安卓运行环境。

其中库文件中主要是安卓系统会使用的一些C/C++ 的库文件,包括桌面管理器、媒体库、SQLite等。

手机app蓝牙和WIFI遥控车教程 (1)

手机app蓝牙和WIFI遥控车教程 (1)

独角兽电子手机蓝牙遥控车:手机端教程官方群90060059里先查看本店的《六种智能车制作教程》把车组装好并上电,然后按照如下步骤操作。

注意:如果出现异常,那可能是由于手机问题,就换个手机试试。

!!第一步:90060059群文件下载并安装下面这个软件,不知道就问群主第三步:搜索过后会出现如下本图这样:蓝牙模块红灯闪才能被搜索到第二步:安装后点击进入,会出现如下图示第五步:设备连接后点击键盘模式第七步:设置为51,然后点击确定,第六步:进入后点击右上角的“三个点”,再点击设置长按发送频率第四步:点击搜索出来的结果,进入后再点击“连接设备”第九步:点击配置键盘值后会出现个对话框,然后随便选择一个键按如下设置。

再点击确定第十步:再随便点击一个键进行如下设置。

再点击确定第八步:然后再点击右上角的“三个点”,再点击配置键盘值第十一步:再随便点击一个键进行如下设置。

再点击确定第十三步:再随便点击一个键进行如下设置。

再点击确定第十二步:再随便点击一个键进行如下设置。

再点击确定第十四步:点击右上角的“三个点”,再点击保存键盘配置第十五步:开车,新手上路独角兽电子手机WIFI遥控车:手机端教程官方群90060059里先查看本店的《六种智能车制作教程》把车组装好并上电,然后按照如下步骤操作。

第二步:点击连接这个由ESP8266产生的开放WIFI 第三步:IP和端口号不管。

直接点击“CONNECT”,然后开车,按键不要太快!开车:如果断开后就断开再连接就好。

第一步:90060059群文件下载并安装下面这个软件,不知道就问群主。

开源:安卓手机app控制arduino,通过esp8266

开源:安卓手机app控制arduino,通过esp8266

开源:安卓⼿机app控制arduino,通过esp8266⽬录第⼀、先上效果图具体连接:ESP8266-01 ----------arduino3.3v-------------3.3VGND-----------GNDEN--------------3.3VTX-------------pin13RX----------------pin12第⼆、原理讲解原理简述:利⽤发布订阅模式。

第⼀步,新建主题,第⼆步,arduino通过esp8266订阅这个主题。

第三步、通过app往这个主题发消息。

由于单⽚机订阅了这个主题,所以可以实时收到发往这个主题的消息。

从⽽达到通过app或者微信⼩程序控制arduino单⽚机的⽬的。

关于发布订阅:订阅(订阅):订阅给定的⼀个主题。

发布(发布)将信息发送到指定的主题。

只有订阅该主题的设备才可以收到发往该主题的消息。

通俗的来讲:就是像博客订阅的场景,什么意思呢,也就是说100个⼈订阅了你的博客,如果博主发表了⽂章,那么100个⼈就会同时收到通知邮件,订阅/发布模式就是这样的原理。

如果还不理解的话再通俗讲⼀下,就像⽣活中听收⾳机,要想听收⾳机,肯定就是调频啦,只有在正确的频道上⾯,我们才能听得到好听的节⽬,所以说订阅⾸先要订阅⼀个频道/主题,只有订阅了该主题,我们才能收到发往该频道/主题的消息。

在本例程中,arduino借助ESP8266订阅主题,app订阅或者⼩程序发布消息,arduino会实时收到消息,就可以实时控制arduino了。

第三、下载程序到arduino开发环境:arduino IDEesp8266-01不需要编程。

arduino ⽰例程序下载:注意:上传程序的时候,需断开arduino 和esp8266的连线,不然会下载失败。

程序说明,波特率9600由于ESP8266-01默认波特率是115200,需要先⼿动调节esp8266-01的波特率为9600,115200波特率过⾼会乱码。

手机蓝牙遥控智能小车

手机蓝牙遥控智能小车

模块化手机蓝牙遥控、超声波避障及人体检测智能小车说明书实用发明协会:徐鹏王鹏一﹑小车说明1小车采用传统51单片机控制,能实现手机蓝牙遥控﹑超声波避障及人体检测功能,各种状态能在LCD1602液晶屏上直观的显示出来。

2小车地盘采用四个直流电机驱动,装有蓝牙模块一个﹑超声波模块一个﹑单片机系统板一块﹑STC89C52RC单片机一块电池一块﹑LCD1602液晶屏一块﹑L9110电机驱动模块两块﹑稳压模块一块﹑人体红外传感器模块两块及装饰LED。

二﹑模块说明1蓝牙模块:核心模块使用HC-06从模块,接口电平3.3V,可以直接连接各种单片机,配对以后当全双工串口使用,仅支持8位数据位、1位停止位、无奇偶校验的通信格式,自身的TXD 直接连接到单片机RXD,RXD接单片机TXD。

2超声波模块:使用电压5V,静态电流小于2mA,电平输出高5V低0V,感应角度不大于15度,探测距离2cm-450cm。

3 STC89C52RC:STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选。

4 L9110电机驱动模块:模块供电电压2.5-12V,电机工作电压2.5v-12V之间,最大工作电流0.8A,可以同时驱动2个直流电机,或者1个4线2相式步进电机。

通过单片机给逻辑电压从而控制直流电机的正反转。

智能小车源代码

智能小车源代码

#include<reg51.H>#include <intrins.h>//#include"lcd.h"sbit TX=P2^7;sbit RX=P2^6;sbit PWM=P1^4;sbit Beep=P3^7;sbit led1=P3^3;sbit led2=P3^4;sbit led3=P3^5;/***********蓝牙切换按键**********/sbit k1=P3^6;/***自定义一些数据;注意这些数据对应“51智能车蓝牙无线遥控.exe”软件上的数据设置**/ #define leftdata 0x11#define rightdata 0x22#define forwarddata 0x33#define backdata 0x44#define stopdata 0x55#define uchar unsigned char#define uint unsigned intunsigned char receiveData;high_velosity;low_velosity;void UsartConfiguration;/***********电机端口定义************************/sbit IN1=P1^0; //为高电平时;左电机后转sbit IN2=P1^1; //为高电平时;左电机正转sbit IN3=P1^2; //为高电平时;右电机正转sbit IN4=P1^3; //为高电平时;右电机后转/**************无线遥控模块定义****************/sbit Key_A = P2^0; //B键信号端对应D0sbit Key_B = P2^1; //D键信号端对应D1sbit Key_C = P2^2; //C键信号端对应D2sbit Key_D = P2^3; //C键信号端void delay0int a;void delay15usvoid;void delay1msint z;void di; //蜂鸣器函数声明unsigned int time;//用于存放定时器时间值unsigned int S; //用于存放距离的值char flag =0; //量程溢出标志位char f1;f2;f3;f4;n0;int a;int n;//运行次数判断标志int s_left;s_right;void Delay10usunsigned char i{unsigned char j;do{j = 10;do{_nop_;}while--j;}while--i;}/****************************************************************************** ***************//*****************电机程序********************//****************************************************************************** **************/void loop{IN1=1; //左电机IN2=0;IN3=1; //右电机IN4=0;}void runfront{IN1=1; //左电机IN2=0;IN3=0; //右电机IN4=1;}//小车后退函数void runback{IN1=0; //左电机IN2=1;IN3=1; //右电机IN4=0;}//小车左转void runleft{IN1=0; //左电机IN2=0;IN3=0; //右电机IN4=1;}//小车右转void runright{IN1=1; //左电机IN2=0;IN3=0; //右电机IN4=0;}////小车左后转//void runbackleft//{// IN1=0; //左电机// IN2=0;// IN3=0; //右电机// IN4=1;//}////小车右后转//void runbackright//{// IN1=1; //左电机// IN2=0;// IN3=0; //右电机// IN4=0;//}//小车停止函数void stop{IN1=0; //左电机IN2=0;IN3=0; //右电机IN4=0;}/*********************************************************************************************//***********蓝牙程序************//****************************************************************************** **************/void delayunsigned int a{unsigned int b;for;a>0;a--forb=3;b>0;b--;}//左电机转void left_motor_runfrontunsigned int a{IN1=1; //左电机IN2=0;delaya;IN1=0;IN2=0;delay100-a;}void right_motor_runfrontunsigned int a{IN3=0; //右电机IN4=1;delaya;IN3=0;IN4=0;delay100-a;}void left_motor_backunsigned int a{IN1=0; //左电机IN2=1;delaya;IN1=0;IN2=0;delay100-a;}void right_motor_backunsigned int a{IN3=1; //右电机IN4=0;delaya;IN3=0;IN4=0;delay100-a;}void left_motor_stop{IN1=0; //左电机IN2=0;}void right_motor_stop{IN3=0; //左电机IN4=0;}//PWM调速void PWM_RUNFRONTunsigned int a;unsigned int b //a属于0~100 {left_motor_runfronta;right_motor_runfrontb;}void PWM_RUNBACKunsigned int a;unsigned int b //a属于0~100 {left_motor_backa;right_motor_backb;}void PWM_RUNLEFTunsigned int a //a属于0~100{right_motor_runfronta;left_motor_stop;}void PWM_RUNRIGHTunsigned int a //a属于0~100{right_motor_stop;left_motor_runfronta;}void bluestop{left_motor_stop ;right_motor_stop ;}void UsartConfiguration{SCON=0X50; //设置为工作方式1TMOD=TMOD|0x21; //设置计数器工作方式2PCON=0X80; //波特率加倍TH1=0XFA; //计数器初始值设置;注意波特率是4800的TL1=0XFA;ES=1; //打开接收中断EA=1; //打开总中断TR1=1;TH0=0;TL0=0;ET0=1; //打开计数器}/****************************************************************************** ** 函数名:Delayunsigned int i* 函数功能: 延时函数* 输入: 无* 输出: 无******************************************************************************* /void Usart interrupt 4{receiveData=SBUF;//出去接收到的数据RI = 0;//清除接收中断标志位ifreceiveData==0x66{low_velosity=1;high_velosity=0;// write_com0x80;}ifreceiveData==0x77{low_velosity=0;high_velosity=1;}}/****************************************************************************** ***************//***********舵机程序************//****************************************************************************** **************/void delayxint t{char j;for;t>0;t--forj=19;j>0;j--;}void degree0{int i;fori=0;i<10;i++{PWM=1;delayx10;//1msPWM=0;delayx390;//19ms}}void degree90{int i;fori=0;i<10;i++{PWM=1;delayx24;//50PWM=0;delayx376;//18.5ms}}void degree180{int i;fori=0;i<15;i++{PWM=1;delayx40;//1.5msPWM=0;delayx360;//18.5ms}}/****************************************************************************** ***************//**************超声波程序**************//****************************************************************************** ***************//****A键被按下后;前进*****/void Count1void{time=TH1*256+TL1;TH1=0;TL1=0;S=time*1.7/100;n++;ifS<=30&&n==1{led1=0;stop;degree0;di;}ifS>30&&n==1{led1=1;runfront;n=0;}ifn==2{s_left=S;degree180;di;}ifn==3{s_right=S;degree90;di;n=0; //标志位清零ifs_left>s_right{led2=1;delay1ms50;led2=0;delay1ms50;runright;delayx1250;}else{led3=1;delay800;led3=0;delay500;runleft;delayx1250;}}}/********超声波高电平脉冲宽度计算程序***************/void Timer_Countvoid{TR1=1; //开启计数whileRX; //当RX为1计数并等待TR1=0; //关闭计数//Count1; //计算}/********************************************************/void StartModule //启动模块{TX=1; //启动一次模块Delay10us2;TX=0;}/****************************************************************************** ***************//********************主程序*******************//*********************************************************************************************/void mainvoid{UsartConfiguration;while1{ifk1==0&&n0==0{delay1ms20;ifk1==0{n0++;}}else ifk1==0&&n0==1{delay1ms20;ifk1==0{n0--;}}ifn0==0{ifKey_B==0&&Key_D==0&&Key_C==0&&Key_A==1 //A键被按下{f1=1;f2=0;f3=0;f4=0;di;}else ifKey_A==0&&Key_D==0&&Key_B==1&&Key_C==0 //B键被按下{f1=0;f2=1;f3=0;f4=0;di;}else ifKey_B==0&&Key_D==0&&Key_A==0&&Key_C==1 //C键被按下{f1=0;f2=0;f3=1;f4=0;di;}else ifKey_D==1&&Key_B==0&&Key_A==0&&Key_C==0 //D键被按下{f1=0;f2=0;f3=0;f4=1;di;}iff1{StartModule;fora=951;a>0;a--{ifRX==1{Timer_Count;Count1;}}}iff2{runback;}iff3{loop;}iff4{stop;}}ifn0==1{iflow_velosity{switchreceiveData{case leftdata: PWM_RUNLEFT30; break;case rightdata: PWM_RUNRIGHT30; break;case forwarddata: PWM_RUNFRONT64;70; break;case backdata: PWM_RUNBACK64;70; break;case stopdata: bluestop; break;}}ifhigh_velosity{switchreceiveData{case leftdata: PWM_RUNLEFT50; break;case rightdata: PWM_RUNRIGHT50; break;case forwarddata: PWM_RUNFRONT94;100; break;case backdata: PWM_RUNBACK94;100; break;case stopdata: stop; break;}}}}}/*****************蜂鸣器*********************/void di{int i;fori=0;i<150;i++{Beep= 1;delay020;}Beep=0;}void delay0int a{char j;int i;fori=a; i > 0; i--forj = 200; j > 0; j--;}void delay1msint z //延时1ms{int x;y;forx=z;x>0;x--fory=110;y>0;y--;}。

基于安卓手机蓝牙控制的智能小车设计

基于安卓手机蓝牙控制的智能小车设计

摘要随着物联网的兴起,Android手机以其独有的开放性优势正在为我们提供更多优质便捷的技术成果。

本课题研究的是基于安卓手机蓝牙控制的智能小车设计,基于手机平台,借助于蓝牙技术,设计和实现了一种无线遥控小车新的解决方案。

设计以手机控制平台、蓝牙通讯模块、电机驱动模块等硬件模块组成的遥控小车。

实现小车的前进、后退、前左转弯、前右转弯、后左转弯、后右转弯等实时控制功能。

为遥控玩具小车的设计提出了一种新的思路,同时可以为将来智能家居的遥控设计提供一定的参考意义。

阐述一种通过手机蓝牙遥控小车行走的软、硬件设计。

手机蓝牙作为客户端,小车上的蓝牙模块HC-06作为服务端。

客户端采用Eclipse开发环境,JAVA编程,服务端采用单片机控制。

双方通过串口进行通信,单片机驱动直流电机控制小车行动。

实验结果表明,小车可以接收手机遥控信号并灵活地进行前行、倒退、左转、右转和停止等功能。

本文介绍了基于安卓手机的蓝牙智能小车控制要实现的功能,接着阐述该系统电路的设计及原理的说明,包括了方案的设计、重要元器件的介绍、电路设计的说明(包括单片机控制电路、电机驱动电路)安卓手机软件界面设计、软件设计流程以及系统的调试。

最后总结了基于安卓的蓝牙智能小车控制设计完成的任务,分析系统出现的不足。

【关键词】Andriod蓝牙智能小车智能手机AT89C52单片机ABSTRACTWith the rise of the Internet of Things, Android phones with its unique advantage of being open for us to provide more quality and convenient technological achievements. The research is based on the Android mobile phone Bluetooth controlled smart car design, based on mobile platforms, by means of Bluetooth technology, design and implementation of a wireless remote control car new solutions. Control platform designed for mobile phones, Bluetooth communication module, motor drive modules and other hardware modules remote control car. Realize the car forward, backward, turn left in front, front right turn after turn left, turn right after the other real-time control functions. For the remote control toy car design presents a new way of thinking, and can for the future smart home remote control designed to provide some reference value.Describes one kind of walking through the phone's Bluetooth remote control car software and hardware design. Bluetooth mobile phone as a client, a small car Bluetooth Module HC-06 as a server. Clients using the Eclipse development environment, JAVA programming, client services using micro-controller. The two sides communicate through the serial port, the microcontroller drive DC motor control car action. Experimental results show that the car can receive mobile phone remote control signals and the flexibility to move forward, backward, turn left, turn right and stop functions.Introduces the based on Andrews's the Bluetooth intelligent trolley control want to achieve the function is trolley be able to forward, backward, turn left, turn right, then expounded that the system circuit design and principle of description, including the program design, it is important components introduction, circuit design Description of (, including SCM control circuit, the motor drive circuit) Andrews mobile phone software interface design, software design flow as well as system debugging. Finally summed up the based on Andrews's the Bluetooth intelligent trolley control design is completed the task of, analysis system appear deficiencies.【Key words】Andriod Bluetooth Intelligent car Smartphone AT89C52 SCM目录前言 (1)第一章绪论 (2)第一节国内外研究现状 (2)第二节发展趋势分析 (4)第三节本章小结 (4)第二章设计方案分析 (5)第一节设计方案分析确定 (5)第二节本章小结 (8)第三章安卓操作系统概述 (9)第一节安卓操作系统发展历史及趋势 (9)第二节 Android开发环境搭建 (9)一、 Android的基本介绍 (9)二、 Android系统构架 (10)三、 Android开发包及其工具的安装和配置 (11)第三节本章小结 (13)第四章系统硬件电路设计 (14)第一节单片机最小系统 (14)第二节电机驱动模块 (17)第三节蓝牙模块 (21)第四节本章小结 (22)第五章系统软件程序设计 (23)第一节主程序设计 (23)第二节手机端程序设计 (25)一、手机界面程序设计 (27)二、手机监听程序设计 (28)第三节本章小结 (29)第六章系统整体的调试 (31)第一节调试的方案 (31)第二节硬件电路调试 (31)一、独立元件的检测 (31)二、单片机最小系统的调试 (33)三、电源电路的测试 (34)四、驱动电路的调试 (34)第三节软件调试 (37)第四节系统整体调试 (38)第五节本章小结 (40)结论 (41)致谢 (43)参考文献 (44)附录 (46)一、英文原文 (46)二、英文翻译 (54)三、源程序 (60)前言遥控小车是玩具市场一种很常见的玩具,但是每个小车都有自己特定的遥控器,原装遥控器坏了很难与其它型号的进行匹配。

图解Android2.1手机遥控NXT机器人全过程

图解Android2.1手机遥控NXT机器人全过程

图解Android2.1手机遥控NXT机器人全过程手机也可以遥控NXT机器人,手机不是打电话的工具吗?如果你拥有Android智能手机,你也可以做到,这篇文章我会耐心图解全过程,先看全景图和视频吧!全景图:视频:视频网址:/player.php/sid/XMjkzNDUyODMy/ v.swf。

Android手机遥控程序,可以到“中文乐高”网去下载,网址:/forum.php?mod=viewthread&tid=511 0&highlight=Android 在这些Android apk程序里,我最喜欢名为“NXT Bluetooth Remote Control”程序,这次遥控就是用的这个程序。

NXT Bluetooth Remote Control程序请下载:/Qe43nWGmgyizR? (访问密码:24bd)。

?下面开始图解Android2.1手机遥控NXT机器人全过程:首先你要把Android手机用USB线与PC机相连,把“NXT Bluetooth Remote Control”程序下载到手机的内存卡的某个文件夹里,我选的文件夹名为“download”。

那么如何在手机里找到这个程序呢?可以看下面两张图。

在红圈标注的“文件管理器”可以找到“NXT Bluetooth Remote Control”程序,绿圈标注的“设置”可以卸载安装的程序。

切换到红圈标注的内存卡,看到了内存卡里的“download”文件夹,点击并打开。

再点击NXT Bluetooth Remote Control.apk,这个apk上面那个apk程序就是官方Android 程序,也可以试试。

安装!看到上图那个“放大镜”图标了吗?点击一下,Android手机会搜寻附近的蓝牙设备,NXT机器人上的控制器带有蓝牙功能,所以很快手机就找到我命名为“NXT”的机器人。

如果你第一次进行Android手机和NXT控制器蓝牙连接,还需进行密码配对,密码为“1234”,Android手机和NXT控制器都要确认密码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上次成功实现了通过笔记本电脑蓝牙来控制智能小车机器人的运动,但是通过电脑控制毕竟不方便,于是乎~本人打算将控制程序移植到手机上。

目前主流的手机操作系统有塞班、安卓(Android)、Windows Mobile,对比了一下,首先,塞班是用C++写的,这么多门语言我唯独看到C++就头大···,放弃了···,Windows Moblie 其实和之前发的电脑端程序基本是一样的,也就没什么意思了,最后决定选择目前正火的Android手机作为控制平台。

Android是个开源的应用,使用Java语言对其编程。

于是这次的开发我选用Eclipse作为开发工具,用Java语言开发手机端的控制程序,由于之前对Android的蓝牙通信这块涉及不多,一开始感觉有点小茫然,而网上也少有这方面的例程,有少数人做出了类似的东西,但是只传了个视频装X!雪特····经过几天的研究,最终确定了手机蓝牙通信其实就是Socket编程,再经过一番编写和调试,昨晚终于大功告成!这是视频:下面开始介绍Android手机端控制程序的编写:首先打开Eclipse,当然之前的Java开发环境和安卓开发工具自己得先配置好,这里就不多说了,网上教程一大摞。

然后新建一个Android项目,修改布局文件main.xml,代码如下:<?xml version="1.0" encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/widget0"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"><Buttonandroid:id="@+id/btnF"android:layout_width="100px"android:layout_height="60px"android:text="前进"android:layout_x="130px"android:layout_y="62px"></Button><Buttonandroid:id="@+id/btnL"android:layout_width="100px"android:layout_height="60px"android:text="左转"android:layout_x="20px"android:layout_y="152px"></Button><Buttonandroid:id="@+id/btnR"android:layout_width="100px"android:layout_height="60px"android:text="右转"android:layout_x="240px"android:layout_y="152px"></Button><Buttonandroid:id="@+id/btnB"android:layout_width="100px"android:layout_height="60px"android:text="后退"android:layout_x="130px"android:layout_y="242px"></Button><Buttonandroid:id="@+id/btnS"android:layout_width="100px"android:layout_height="60px"android:text="停止"android:layout_x="130px"android:layout_y="152px"></Button></AbsoluteLayout>这个布局文件的效果就是如视频中所示的手机操作界面。

然后是权限声明,这一步不能少,否则将无法使用安卓手机的蓝牙功能。

权限声明如下:打开AndroidManifest.xml文件,修改代码如下:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.ThinBTClient.www"android:versionCode="1"android:versionName="1.0"><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><uses-permission android:name="android.permission.BLUETOOTH" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ThinBTClient"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /> </intent-filter></activity></application></manifest>其中红色、加粗部分就是要添加的权限声明。

然后编写Activity中的执行代码,这些代码的作用就是发送指令,控制小车的运动。

代码如下:package com.ThinBTClient.www;import android.app.Activity;import android.os.Bundle;import java.io.IOException;import java.io.OutputStream;import java.util.UUID;import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothSocket;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import monDataKinds.Event;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import android.widget.Toast;public class ThinBTClient extends Activity {private static final String TAG = "THINBTCLIENT";private static final boolean D = true;private BluetoothAdapter mBluetoothAdapter = null;private BluetoothSocket btSocket = null;private OutputStream outStream = null;Button mButtonF;Button mButtonB;Button mButtonL;Button mButtonR;Button mButtonS;private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");private static String address = "00:11:03:21:00:43"; // <==要连接的蓝牙设备MAC 地址/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);//前进mButtonF=(Button)findViewById(R.id.btnF);mButtonF.setOnTouchListener(new Button.OnTouchListener(){ @Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubString message;byte[] msgBuffer;int action = event.getAction();switch(action){case MotionEvent.ACTION_DOWN:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "1";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;case MotionEvent.ACTION_UP:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "0";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;}return false;}});//后退mButtonB=(Button)findViewById(R.id.btnB);mButtonB.setOnTouchListener(new Button.OnTouchListener(){ @Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubString message;byte[] msgBuffer;int action = event.getAction();switch(action){case MotionEvent.ACTION_DOWN:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "3";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;case MotionEvent.ACTION_UP:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "0";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;}return false;}});//左转mButtonL=(Button)findViewById(R.id.btnL);mButtonL.setOnTouchListener(new Button.OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubString message;byte[] msgBuffer;int action = event.getAction();switch(action){case MotionEvent.ACTION_DOWN:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "2";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;case MotionEvent.ACTION_UP:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "0";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;}return false;}});//右转mButtonR=(Button)findViewById(R.id.btnR);mButtonR.setOnTouchListener(new Button.OnTouchListener(){ @Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubString message;byte[] msgBuffer;int action = event.getAction();switch(action){case MotionEvent.ACTION_DOWN:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "4";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;case MotionEvent.ACTION_UP:try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}message = "0";msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}break;}return false;}});//停止mButtonS=(Button)findViewById(R.id.btnS);mButtonS.setOnTouchListener(new Button.OnTouchListener(){ @Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubif(event.getAction()==MotionEvent.ACTION_DOWN)try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}String message = "0";byte[] msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}return false;}});if (D)Log.e(TAG, "+++ ON CREATE +++");mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter == null) {Toast.makeText(this, "Bluetooth is not available.", Toast.LENGTH_LONG).show();finish();return;}if (!mBluetoothAdapter.isEnabled()) {Toast.makeText(this, "Please enable your Bluetooth and re-runthis program.", Toast.LENGTH_LONG).show();finish();return;}if (D)Log.e(TAG, "+++ DONE IN ON CREATE, GOT LOCAL BT ADAPTER +++");}@Overridepublic void onStart() {super.onStart();if (D) Log.e(TAG, "++ ON START ++");}@Overridepublic void onResume() {super.onResume();if (D) {Log.e(TAG, "+ ON RESUME +");Log.e(TAG, "+ ABOUT TO ATTEMPT CLIENT CONNECT +");}BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);try {btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);} catch (IOException e) {Log.e(TAG, "ON RESUME: Socket creation failed.", e);}mBluetoothAdapter.cancelDiscovery();try {btSocket.connect();Log.e(TAG, "ON RESUME: BT connection established, data transfer link open.");} catch (IOException e) {try {btSocket.close();} catch (IOException e2) {Log .e(TAG,"ON RESUME: Unable to close socket during connection failure", e2);}}// Create a data stream so we can talk to server.if (D)Log.e(TAG, "+ ABOUT TO SAY SOMETHING TO SERVER +");/* try {outStream = btSocket.getOutputStream();} catch (IOException e) {Log.e(TAG, "ON RESUME: Output stream creation failed.", e);}String message = "1";byte[] msgBuffer = message.getBytes();try {outStream.write(msgBuffer);} catch (IOException e) {Log.e(TAG, "ON RESUME: Exception during write.", e);}*/}@Overridepublic void onPause() {super.onPause();if (D)Log.e(TAG, "- ON PAUSE -");if (outStream != null) {try {outStream.flush();} catch (IOException e) {Log.e(TAG, "ON PAUSE: Couldn't flush output stream.", e);}}try {btSocket.close();} catch (IOException e2) {Log.e(TAG, "ON PAUSE: Unable to close socket.", e2);}}@Overridepublic void onStop() {super.onStop();if (D)Log.e(TAG, "-- ON STOP --");}@Overridepublic void onDestroy() {super.onDestroy();if (D) Log.e(TAG, "--- ON DESTROY ---");}}可以看到,在这个程序中我直接把小车蓝牙模块的MAC地址给写进去了,其实更合理一点应该让程序运行后搜索周围蓝牙设备,然后选择需要连接的设备,获取它的MAC地址再连接,但是我为了图省事,就直接把我的小车的蓝牙MAC给定死了(反正也没那么多小车让我遥控~~~),这样一打开程序,手机将自动连接智能小车。

相关文档
最新文档