智能小车蓝牙控制技术设计方案 本文关键词:蓝牙,小车,设计方案,控制,智能
智能小车蓝牙控制技术设计方案 本文简介:手机遥控智能小车设计技术设计方案文件编号:项目编号:机密级别:绝密机密内部文件部门:11组拟制:龙操玉*年*月*日校对:*年*月*日审核:*年*月*日批准:*年*月*日文档修订记录日期版本说明作者2017.9.25V1.0文档生成龙操玉2017.9.26V1.1文档修订完成龙操玉一、项目名称《基于S
智能小车蓝牙控制技术设计方案 本文内容:
手机遥控智能小车设计
技术设计方案
文件编号:
项目编号:
机密级别:
绝密
机密
内部文件
部
门:
11组
拟
制:
龙操玉*年*月*日
校
对:*年*月*日
审
核:*年*月*日
批
准:*年*月*日
文档修订记录
日期
版本
说明
作者
2017.9.25
V1.0
文档生成
龙操玉
2017.9.26
V1.1
文档修订完成
龙操玉
一、项目名称
《基于STM32F407的手机遥控智能小车的设计》
二、设计要求及性能指标
设计一个基于STM32F407的手机遥控智能小车,选用STM32F407作为主控芯片进行设计和实现。具体任务包括项目的可行性分析,硬件电路的设计,系统软件设计,仿真调试,实际测试等。
具体要求如下:
(1)
根据提供的原理图和相关资料,了解、掌握小车运行的工作原理,熟悉所用到的硬件模块工作原理
(2)
学习掌握STM32F407库函数编程环境,掌握相关的库函数
(3)
编写STM32F407程序,应用电机驱动模块、蓝牙模块和语音模块,实现小车根据接收到的指令(手机发出)完成相应的动作,并通过语音模块告知指令内容
三、项目总体方案设计
1、系统总体方案
根据课程设计的要求,系统设计方案如下:以STM32F407作为微控制器,以电机驱动电路和两个直流减速电机构成电机驱动模块;语音模块作为语音控制电路、以在特定的操作下产生相应的语音;以蓝牙模块和手机蓝牙相连接,以接收手机相应的指令;以7805稳压管构成电源电路。手机遥控智能小车系统结构框图如图1所示。
图1
手机遥控智能小车系统结构框图
手机遥控小车就是通过手机蓝牙和智能小车无线连接,通过蓝牙发送指令,小车接送到指令后,就会按照预先设定的程序,执行相应的操作,并由语音模块发出一系列相应的语音。为了实现这一目的,就需要有信息处理功能的微处理器来接收手机蓝牙发送的相应指令,然后将处理的指令发送到执行机构来执行,这就需要电机驱动模块,来实现小车的行走功能,而一个完整的系统,还需要有电源模块来提供能量。
系统的基本原理:预先在单片机内编程,使得相应的指令对应控制小车相应的轮子。
然后手机通过蓝牙将相应的指令发送到单片机,以控制小车的运行。
2、关键技术、设计难点及其解决方案
关键技术:
1、能做到小车和手机无线连接,控制方便。
2、需要一个中央大脑,既能接收到手机的指令,又能奖指令传送给小车。
3、小车的接收到相应的指令后,可以做出相应的运用或者操作。
难点:
1、如何选择相应的中央大脑,选好之后怎么设置指令能做到简单和准确。
2、如何选择相应的驱动电路。如何操作。
解决方案
1、选择单片机芯片作为中央控制大脑,
2、通过学习相关芯片的技术手册对芯片进行初始化调试。
3、根据小车具体的相应过程进行能进一步的优化。
四、项目详细方案设计
1、核心器件选型(分析核心器件有哪些?选型的依据和原则是什么?有哪些可以选择的器件?为什么要选择最终的那个器件?)
(1)
STM32F407主控芯片
(2)
BLE100蓝牙芯片
(3)
JQ8400语音芯片
(4)L298N驱动芯片
2、硬件电路设计(给出系统的硬件电路设计,并分析其工作原理。)
(1)手机遥控智能小车硬件设计
手机遥控智能小车的硬件电路主要由稳压电路模块、电机驱动模块、蓝牙模块、控制模块等组成,语音播报模块组成,小车硬件电路如图2所示。
图2
手机遥控智能小车硬件电路
(2)单片机模块和电源电路设计
单片机模块只需要复位电路和晶振电路就能满足控制要求,其中复位操作完成单片机片内电路的初始化,使单片机从一确定的状态开始运行,当单片机的复位引脚RST出现5ms以上高电平时单片机就完成了复位操作;时钟电路就是在引脚XTAL1和XTAL2外接晶体振荡器构成内部振荡方式,内部振荡方式所得的时钟信号比较稳定,实用电路中使用较多。
电源电路由L7805和电容组成,最大输入电压可达35V,最大输出电流为1.5A,输出电压为5V,这里输入用7.2V充电电池组。由于其输出电压为5V,因此作为单片机的稳压电路芯片非常合适,而且价格便宜,其输出可直接给单片机供电。单片机模块和电源模块如图3所示。
图3
单片机模块和电源电路
(3)电动机驱动模块
电机驱动选用电机专用驱动芯片L298N,L298N
是专用驱动集成电路,属于H
桥集成电路,其输出电流增大,功率增强。其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁
阀等,特别是其输入端可以与单片机直接相联,从而很方便地受单片机控制。当驱动直流电机时,可以直接控制步进电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。为了避免电机对单片机的干扰,本模块加入光耦,进行光电隔离,从而使系统能稳定可靠的工作。
电机调速通常用的是PWM调速,即脉宽调制方式驱动,通过改变占空比来改变电动机转速。具体控制方式如下:input1~input4接单片机,控制电动机转向,若单片机一I/O口输出PWM信号到使能端Enable
A,当Enable
A为高电平时电动机则转动,若为低电平则不转动,通过调节PWM波的占空比可以改变Enable
A的高低电平时间从而可以改变电动机的转速。电机驱动电路如图4所示。
图4电机驱动电路
3、系统软件设计(给出系统的软件设计,画出程序流程图,并给出关键部分的程序说明。)
(1)系统程序流程图(画出项目的系统程序流程图并做详细的说明)
手机遥控智能小车通过蓝牙接收手机的指令,要求单片机对4个电机驱动进行控制,从而控制小车轮子的运动,进而控制小车整体的运动。具体程序流程图如图6所示。
(2)主要子程序流程图(画出主要子程序的程序流程图并做详细的说明
)
五、项目实施计划及说明(用甘特图的方式将项目进行规划,并做详细说明。)
项目进度计划甘特图
项目任务
23号
24号
25号
26号
27号
29号
30号
1号
2号
3号
4号
项目导入
技术设计方案
原理图设计
PCB设计
余下的自己填写
六、参考文摘(相关文摘不少于3篇,记录每篇文献的作者姓名.文献名称.文献发行城市:文献出版社,出版年)
[1]吴友宇.
模拟电子技术基础.
北京:清华大学出版社,2009
[2]周新民.
工程实践与训练教程.
武汉:武汉理工大学出版社,2009
[3]刘原.
电路分析基础.
北京:电子工业出版社,2011
篇2:工程技术综合实践项目设计报告-基于蓝牙控制的智能车
工程技术综合实践项目设计报告-基于蓝牙控制的智能车 本文关键词:蓝牙,工程技术,实践,控制,智能
工程技术综合实践项目设计报告-基于蓝牙控制的智能车 本文简介:工程技术综合实践项目设计报告(电类)项目名称:基于蓝牙控制的智能车指导教师:戴世通周国玲戚东辉蔡文婷项目成员:贾航辉、赵全、杨濛雨、张锴西安理工大学工程训练中心*年*月*日目录工程技术综合实践课程任务书1项目组成员及分工2概述31总体设计31.1系统功能及技术指标功能:蓝牙遥控小车。技术指标:31.
工程技术综合实践项目设计报告-基于蓝牙控制的智能车 本文内容:
工程技术综合实践
项目设计报告
(电类)
项目名称:
基于蓝牙控制的智能车
指导教师:
戴世通
周国玲
戚东辉
蔡文婷
项目成员:
贾航辉、赵全、杨濛雨、张锴
西安理工大学工程训练中心*年*月*日
目录
工程技术综合实践课程任务书1
项目组成员及分工2
概述3
1
总体设计3
1.1
系统功能及技术指标
功能:蓝牙遥控小车。
技术指标:3
1.2
系统构成3
1.3主要设备及元器件选型3
1.4系统核心处理策略6
2
详细设计6
2.1功能划分
6
2.2
PCB设计7
2.3系统硬件资源清单8
3.软件设计9
3.1
软件功能模块9
3.2
源程序(见附录1)10
4
结构设计10
5
调试与测试10
5.1
调试10
5.2
测试10
5.3
调试测试后发现的不足10
6结论10
7
感想11
附录1
小车源程序12
装置总造价表15
工程技术综合实践课程任务书
项目名称
基于蓝牙控制的智能车
项目组号
L7
教师组组长
戴世通
电话
15388600332
[email protected]
指导教师
戴世通
周国玲
戚东辉
蔡文婷
项目组学生人数
4
项目内容:(包括功能描述、完成内容、技术要求、工艺要求等)
功能描述:
用手机终端作为遥控器,使用蓝牙技术与小车通讯,进而控制小车的运动。
完成内容:
项目管理;成本核算与记录;文档收集整理;项目分析与调研;确定项目方案;元器件选择与购买;硬件电路设计;PCB设计与制作;元器件安装与调试;编程与调试;壳体设计与制作;产品装配与调试。
技术要求:
产品基于AVR单片机,通过手机蓝牙和车载蓝牙实现数据的传输。
通过
ICCAVR编程。
车模要求:舵机控制转向,可适当添加减震装置。
通过手控和重力感应两种模式进行控制。
工艺要求:
(1)线路板各元件布局均匀、整齐、紧凑,尽量减小和缩短各元件之间的引线和连接。
(2)线路板焊盘、线、过孔的尺寸、间距符合标准,线拐弯处不得出现尖角。
(3)产品外形美观大方,便于操作使用。
涉及知识:
(1)AVR单片机编程,涉及ATmega16的PWM和串口通讯。
(2)舵机的使用。
(3)BTS7960电机驱动芯片的驱动电路。
(4)PCB原理图和封装的绘制
项目组成员及工作任务分配(序号1为项目组长)
序号
班
级
姓
名
工作内容
联系方式
1
自121
贾航辉
编写程序,整车的装配与调试。
18066702924
2
自121
赵全
电路的设计及PCB的绘制。
18292092074
3
自121
杨濛雨
线路板的焊接,工艺美化。
13669277254
4
自121
张锴
查阅资料收集文档,采购。
13572428364
5
6
课程指导组审批意见*年*月*日
项目组成员及分工
序
号
姓
名
学
号
班
级
工
作
内
容
备注
1
贾航辉
3120413021
自121
编写程序,设计电路,装配与调试。
2
赵全
3120413017
自121
PCB绘制。
3
杨濛雨
3120413014
自121
线路板的焊接,工艺美化。
4
张锴
3120413012
自121
查阅资料收集文档。
概述
本产品基于AVR
ATmega16单片机,用手机终端作为遥控器,使用蓝牙技术与小车通讯,通过PWM调速控制小车速度,舵机转向,控制小车飞快移动。
1
总体设计
1.1
系统功能及技术指标
功能:蓝牙遥控小车。
技术指标:
(1)线路板各元件布局均匀、整齐、紧凑,尽量减小和缩短各元件之间的引线和连接。
(2)线路板焊盘、线、过孔的尺寸、间距符合标准,线拐弯处不得出现尖角。
(3)产品外形美观大方,便于操作使用。
1.2
系统构成
ATmega16
蓝牙
电机驱动
舵机
图1-1
系统构成图
1.3主要设备及元器件选型
(1)ATmega16单片机,价格便宜,能输出4路相位正确的PWM波。简单易学。
ATmega16
有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512
字节EEPROM,1K
字节SRAM,32
个通用I/O
口线,32
个通用工作寄存器,用于边界扫描的JTAG
接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/
计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP
封装)
的ADC
,具有片内振荡器的可编程看门狗定时器,一个SPI
串行端口,以及六个可以通过软件进行选择的省电模式。
图1-2
Mega16引脚图
(2)HC-06蓝牙模块,有效控制距离15米。
图1-3
蓝牙模块
(3)舵机,用于小车转向,方便灵活,比差速效果好很多。
舵机选用MG995型舵机,优点是价格便宜,金属齿轮,耐用度高。
图1-4
MG995舵机
舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:
图1-5
舵机控制波形图
当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置
为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相
反。
(4)BTS7960驱动芯片+360H电机,驱动能力强,提高小车的速度
1.4系统核心处理策略
手机APP软件通过蓝牙发送数据给单片机,单片机通过读取串口接收的不同数据做出相应的动作。蓝牙模块与手机之间通讯波特率为9600.手机发送相应的ASCII码,单片机通过蓝牙接收,A、B、C、D分别对应前后左右。其中左右转向即当单片机接收到CD信号时,通过PD7口(OC2)输出50HZ,不同占空比的PWM波控制舵机转向。同时,指令123分别用于电机调速。
1.5其他小车材质为亚克力板
。
2
详细设计
ATmega16
蓝牙
电机驱动
舵机
2.1功能划分
图2-1
功能模块图
2.12系统原理图及元器件清单
图2-2
系统原理图
2.2
PCB设计
图2-3
PCB-2D视图
图2-4
PCB-3D视图
2.3系统硬件资源清单
序号
名称
规格
型号
数量
1
AVR
单片机
DIP-40直插
Mega-16
1
2
单片机底座
锁紧座
1
3
自锁开关
6脚
1
4
复位开关
1
5
蓝牙模块
HC-06
1
6
BTS7960
贴片
2
7
7805稳压IC
1
8
7806稳压IC
1
9
整车模一套
亚克力板
1
10
充电电池组
1
表2-1
硬件资源清单
备注:电阻,电容,杜邦线等原件不一一列出。
3.软件设计
3.1
软件功能模块
开始
初始化
A
输入指令指令
输出
结束
B
C
D
E
1
2
3
前
后
左
右
清除
PWM输出
图3-1
程序流程图
3.2
源程序(见附录1)
4
结构设计
考虑到车模整体的美观,和后轮间距,最终决定做出10cm*10cm的PCB板。把电池放于下边以降低小车重心。由于联轴器与传动轴之间靠塑料机米固定连接,为了加强整体强度,在这些容易滑脱的地方通过AB胶粘合。
5
调试与测试
5.1
调试
舵机PWM调试
(1)舵机调中,实时改变舵机输入PWM的占空比,确定舵机归中的的占空比大小。
(2)确定舵机的左极限,右极限。
电机PWM调试
电机驱动使用两片BTS7960搭成全桥驱动电路,可通过大电流。给两片BTS7960输入不同占空比20K的PWM波.观察电机转速,设置3个速度档位,最快速度不超过普通人奔跑速度。最终确定最大速度为20K占空比40%的PWM输入。
组装调试。
舵机的左右摆角为左右极限时,前轮胎会卡在车体上。所以通过程序控制左右摆角为合适角度。
5.2
测试
实测效果良好,可达到预期目标。速度,操作灵活性,有效控制距离都达预期目标。
5.3
调试测试后发现的不足
(1)PCB板可以全换为贴片元件,能减小一半的板子面积。
(2)超出有效控制距离后失控,应该设置为失控后停车。
(3)受车体本身材料限制,为防止损坏车体,最大速度不能很大。
6结论
小车达到系统设计要求,可通过手机蓝牙实时控制PWM波调速。转向灵活、轻巧,控制简单。可在手动控制和重力感应控制之间切换。最大速度设置为50%占空比,已经超越人的跑步速度。考虑到车体为亚克力板材质,速度不再提高。由于此次PCB的绘制是第一次,难免出现许多问题。电容的引脚距离比实物小了些,误将串口与IO口连在了一起。不过在后期都一一校正。这里要感谢戴老师在PCB绘制方面的指点。
7
感想
发现无处不在,这辆小车是在无意中产生的。当时在调飞思卡尔,用车上的蓝牙向电脑,发送数据观测车的状态。突然想既然能发送数据,他也就能收数据,通过串口调试助手向蓝牙发送相应数据,果然可以控制小车。后期使用的手机的串口APP,蓝牙小车就这样诞生了。小车适合小孩玩耍使用,轻便灵活。造价低。性能高。
附录1
小车源程序
#
include
#
define
uint
unsigned
int
uint
i;
void
delay_100ms(
uint
k
)
{
while(
k>0
)
{
for(
i=42;
i>0;
i--
);
k--;
}
}
/*串口初始化*/
void
uart_init()
{
UCSRA=0x02;
//异步正常模式
UCSRB=0x18;
//允许发送接受中断和使能
UCSRC=0x06;
//8位数据
UBRRH=0x00;
UBRRL=12;
//波特率位9600
}
void
chushi()
{
PORTD
=
0b11111111;
DDRD
=
0b11111110;
PORTB
=
0b11111111;
DDRB
=
0b11111111;
}
void
init_pwm()
{
TCCR1A
=
0b10100010;//10100010
TCCR1B
=
0b00011001;
ICR1
=
100;
//1199周期
中值91
左极限
40
有极限150
OCR1A
=
00;
OCR1B
=
00;
TCCR2=0x6c;
OCR2=21;
}
void
main()
{
char
num;
double
n,j;
chushi();
init_pwm();
uart_init();
while
(1)
//16
21
28
{
num=UDR;
if(num==
1
)
{
OCR1A
=
20;
OCR1B
=
10;
}
else
if(num==
2
)
{
OCR1A
=
30;
OCR1B
=
10;
}
else
if(num==
3
)
{
OCR1A
=
100;
OCR1B
=
0;
}
switch(num)
{
case
C
:
OCR2=16;
OCR1A
=
30;
OCR1B
=
10;
break;
case
D
:
OCR2=26;
OCR1A
=
30;
OCR1B
=
10;
break;
case
A
:
OCR2=21;
OCR1A
=
30;
OCR1B
=
10;
break;
case
E
:
OCR2=21;
OCR1A
=
00;
OCR1B
=
00;
break;
case
B
:
OCR2=21;
OCR1A
=
10;
OCR1B
=30;
break;
}
for(n=210;n>=160;n--)
{
j=n/10;
OCR2=j;
delay_100ms(4);
}
for(n=160;n=210;n--)
{
j=n/10;
OCR2=j;
delay_100ms(4);
}*/
}
}
16
装置总造价表
组号
L7
项目名称
基于蓝牙控制的智能车
元器件费用(元)
80
线路板制作费(元)
100
外壳组装费用(元)
180
总造价(元)
360
填表人:*年*月*日
篇3:蓝牙电话网关系统综合开发-嵌入式实验报告
蓝牙电话网关系统综合开发-嵌入式实验报告 本文关键词:蓝牙,网关,嵌入式,综合开发,实验
蓝牙电话网关系统综合开发-嵌入式实验报告 本文简介:11嵌入式系统实验报告姓名:宁昭义组数:第5组学号:152108061456专业:信息与通信工程日期:2015年12月20日综合实验(蓝牙电话网关系统综合开发案例)一、实验目的1.熟练建立交叉编译环境。2.了解蓝牙电话网关实现的原理。3.通过编程实现通过建立的蓝牙链接实现对GSM模块功能的控制。二、
蓝牙电话网关系统综合开发-嵌入式实验报告 本文内容:
11
嵌入式系统实验报告
姓名:宁昭义
组数:第5组
学号:152108061456
专业:信息与通信工程
日期:2015年12月20日
综合实验(蓝牙电话网关系统综合开发案例)
一、实验目的
1.熟练建立交叉编译环境。
2.了解蓝牙电话网关实现的原理。
3.通过编程实现通过建立的蓝牙链接实现对GSM模块功能的控制。
二、实验内容
1.前言
在蓝牙电话网关系统中,嵌入式主机起到主控作用,Bluetooth模块则向N个蓝牙电话终端设备提供语音接入功能,GSM/GPRS模块提供语音呼出服务,使得任何一个蓝牙电话终端的呼叫请求都能够连接到公众语音网络,从而实现本系统内部的蓝牙电话终端与外部公众语音通信网络用户的通信。
本开发案例构建了完整的蓝牙电话网关系统,系统组成结构如上图所示。嵌入式蓝牙电话网关是本系统的核心设备,主要使用了本产品中的ARM9嵌入式主机、Bluetooth
和GSM/GPRS通信模块。
本实验通过蓝牙建立无线连接,控制板载GSM模块拨打电话,示意图如下所示。
2.具体任务
1)
开发板1的蓝牙与开发板2的蓝牙建立语音和数据链路。
2)
设置开发板1,使开发板1能控制GSM模块拨打电话。
3)
开发板2通过建好的蓝牙链路控制开发板1的GSM模块拨打电话。
3.实验设备与软件环境
硬件:SemitARM9200开发板、PC机PIII800MHz,256MB以上、串口线(公母)1根、网线1根,音频线一对,7.5V电源1个,以上设备均需2套。
软件:RedHat
9.0
Linux操作系统,SemitARM9200实验开发软件。
三、实验步骤
分别将开发板1与开发板2的DEBUG
COM与PC1和PC2的串口相连,开发板的网口与PC的网口相连。开发板接7.5V电源。启动开发板1与开发板2,并建立交叉编译环境。
在开发板1上插入SIM卡,打开开发板1上GSM开关,按下GSM
RESET键复位GSM,等到GSM
MODE灯闪烁之后说明GSM模块已经启动成功。
开发板1与开发板2分别输入sh
/etc/scripts_arm.sh启动蓝牙
输入hciconfig显示蓝牙地址
在开发板1:
输入cd
/mnt/SEMIT_Project/Bluetooth_Cellphone/Bluetooth_Cellphone_Server进入文件夹
输入./server
开发板2:
输入cd
/mnt/SEMIT_Project/Bluetooth_Cellphone/Bluetooth_Cellphone_Client进入文件夹
输入./client
00:06:6e:17:1c:30
开发板2将通过蓝牙与开发板1建立链接,屏幕上将出现please
select
the
function字样代表已经可以控制开发板2的板载GSM模块拨打电话,按操作界面提示信息进行操作。
四、附录(程序)
Client端
#ifdef
HAVE_CONFIG_H
#include
#endif
#define
DEBUG
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
“bluetooth/bluetooth.h“#include
“bluetooth/hci.h“#include
“bluetooth/hci_lib.h“#include
“bluetooth/l2cap.h“#include
“bluetooth/sdp.h“#include
“bluetooth/sdp_lib.h“#include
“bluetooth/sco.h“#include
“bluetooth/tcs.h“void
baswap(bdaddr_tdst,const
bdaddr_tsrc)
{
register
unsigned
chard
=
(unsigned
char)
dst;
register
const
unsigned
chars
=
(const
unsigned
char)
src;
register
int
i;
for
(i
=
0;
i
“);
memset(cmd_line,0,50);
scanf(“%s“,cmd_line);
ch
=
cmd_line[0];
switch(ch)
{
case
1
:
printf(“please
enter
the
number
to
call/n>“);
memset(phonenum,0,sizeof(phonenum)
);
scanf(“%s“,phonenum);
phonenum[strlen(phonenum)]
=
0;
phonenum_len
=
strlen(phonenum);
memcpy(cmd_line+1,phonenum,phonenum_len);
nwrite
=
write(
s,cmd_line,sizeof(cmd_line)
);
sleep(1);
break;
case
2
:
nwrite
=
write(s,“2“,1);
sleep(1);
close(sco_s);
break;
case
3
:
nwrite
=
write(s,“3“,1);
printf(“exiting
./n“);
exit(0);
default:
break;
}
}
}
int
main(int
argc,char*argv[])
{
memset(phonenum,0,sizeof(phonenum));
debug(“beginingnow./n“);
//tcs_con_bt*
tcs;
//tcs->tcs_cur_state
=
STATE_NULL;
tcs_dt_init(argc,argv);
return
0;
}
Server端
#ifdef
HAVE_CONFIG_H
#include
#endif
#define
DEBUG
#include
#include
#include
#include
#include
#include
#include
#include
/*
File
control
definitions/
#include
/*
Error
number
definitions/
#include
/*
POSIX
terminal
control
definitions/
#include
/*
Mluti-programming
definitions*/
#include
“bluetooth/bluetooth.h“#include
“bluetooth/hci.h“#include
“bluetooth/hci_lib.h“#include
“bluetooth/l2cap.h“#include
“bluetooth/sdp.h“#include
“bluetooth/sdp_lib.h“#include
“bluetooth/sco.h“#include
“bluetooth/tcs.h“#define
MAX_LEN
32
For
debug
#ifdef
DEBUG
void
debug(char
str)
{
printf(str);
}
#else
#define
debug(str)
#endif
void
baswap(bdaddr_tdst,const
bdaddr_tsrc)
{
register
unsigned
chard
=
(unsigned
char)
dst;
register
const
unsigned
chars
=
(const
unsigned
char)
src;
register
int
i;
for
(i
=
0;
i
0)
{
switch(
buf[0]
)
{
case
1
:
//
gw_add_sco();
printf(“received
call
commands/n“);
printf(“phone
num
is
%s,len
is
%d/n“,buf+1,strlen(buf+1)
);
memset(send_cmd,0,sizeof(send_cmd));
memcpy(send_cmd,“ATD“,3);
memcpy(send_cmd+3,buf+1,strlen(buf+1)
);
send_cmd[
strlen(send_cmd)
]
=
;
;
send_cmd[
strlen(send_cmd)
]
=
0x0D
;
write(
fd,send_cmd,sizeof(send_cmd)
);
printf(“calling
GSM/n“);
break;
case
2
:
//gw_close_sco();
printf(“received
release
command/n“);
memset(send_cmd,0,sizeof(send_cmd));
memcpy(send_cmd,“ATH“,3);
send_cmd[strlen(send_cmd)]
=
0x0D;
write(
fd,send_cmd,sizeof(send_cmd)
);
printf(“call
released/n“);
break;
case
3
:
exit(0);
default:
break;
}
}
}
close(client);
close(s);
}
int
main()
{
char
c=0x41;
char
tmp_buf[25];
pid_t
pid;
debug(“beginingnow./n“);
tcs_state
=
STATE_NULL;
fd=open_port(fd,3);
set_opt(fd,115200,8,N,1);
tcs_init();
gw_process();
return
0;
}