Keke 发表于 2013-12-12 12:38:47

Aruino蓝牙驱动Led灯

本帖最后由 Keke 于 2013-12-12 12:38 编辑

   终于花时间测试了一下蓝牙shield,共享一下测试结果,我使用的是Arduino Uno板子加上蓝牙shield,先上电路图(由于找不到Frizing里面的蓝牙shield,所以用Arduino板子代替,插上shield之后接口还是一样的)。电路目的是使用蓝牙驱动Led灯的亮灭。

实验材料

Arduino兼容版 一块
蓝牙shield板 一块
蓝牙模块 一块
面包板    一块
220欧姆电阻一块
任意颜色LED    一枚
220欧姆电阻 一个
数据线 两根


实验电路图


电路非常简单,从13号引脚到地线,中间串接220欧姆的保护电阻。

程序代码
char c;
int pin=13;

void setup()
{
Serial.begin(9600);
pinMode(pin,OUTPUT);
}

void loop()
{
c=Serial.read();
if(c=='1')
{
    digitalWrite(pin,HIGH);
    Serial.write("ON");

}else if(c=='0'){
digitalWrite(pin,LOW);
Serial.write("OFF");
}
}

其实蓝牙sheild就是把蓝牙模块接到串口上,arduino程序就像是在操作串口。下载程序。切记:下载程序时,将扩展板切换开关拨至 O(外侧)状态,下载完毕时,将扩展板切换开关拨至 C(内侧)状态。因为 arduino 下载程序时会 因为有串口外部设备造成下载失败。这个开关是用来区分Arduino板子是接哪个串口的。

使用iphone或者带ipad从appstore下载软件 LightBlue 蓝牙调试软件,寻找外围设备,发现 HMSoft, 点击进入,然后点击 UUID 0XFFE0,进入,再次点击 0XFFE1。此时连接完毕。

该软件下方有三个按钮:
Read:接收的数据;
Write:iOS 向外发送数据;
Start Notify: 开始监听读写数据。
记住一定要点击Start Notify,否则无法收到蓝牙模块发回的信号。

点击Write,在ASCII栏中写入1或者0,操纵LED灯的亮和灭。由于启动了监听读写数据,蓝牙模块返回的“ON”和“OFF”会自动现实在三个按钮上方的ASCII栏中。

等下上视频。

Keke 发表于 2013-12-12 13:46:23

实验视频
http://v.youku.com/v_show/id_XNjQ3MTg2NDE2.html

jeffliu 发表于 2013-12-12 16:03:06

不错,支持一下。不知道你有没有研究过从Arduino接收传感信号再通过蓝牙发送给手机?我现在玩RFID+蓝牙,需要监控感应区有RFID卡后通过蓝牙发送消息给手机打开相应应用,应用也需要主动与RFID进行通讯,也就是蓝牙串口消息要双向发,这个问题比较难办,目前是手机轮询查找RFID卡,但是有时候轮询的时侯正好用户需要操作RFID卡,两种数据混在一块没法判断。

Keke 发表于 2013-12-13 11:46:10

jeffliu 发表于 2013-12-12 16:03 static/image/common/back.gif
不错,支持一下。不知道你有没有研究过从Arduino接收传感信号再通过蓝牙发送给手机?我现在玩RFID+蓝牙,需 ...

在同一个循环里面先后读取蓝牙和RFID 是否可以?或者蓝牙轮询,RFID用中断。

jeffliu 发表于 2013-12-13 22:07:15

Keke 发表于 2013-12-13 11:46 static/image/common/back.gif
在同一个循环里面先后读取蓝牙和RFID 是否可以?或者蓝牙轮询,RFID用中断。

对中断不了解,根据定义似乎只能对数字或模拟口的电压变化起作用,对RFID模块发出的特定串口信号能触发中断吗?现在我暂时是用轮询的方式来解决,至于信号冲突,我设了个变量isRunning,在执行一个命令之前先把这个变量设为true,执行完成后再设回false,任意命令执行之前先check一下isRunning情况,这样能减少大部分冲突,但是有时候还是会出问题,实在不知道该怎么写好了,唉。

Keke 发表于 2013-12-18 09:57:59

我没有写过RFID,但只要两个设备都不是阻塞式的,轮询应该是可以搞定的。同一个循环里面依次读取两个设备不就可以了。

jeffliu 发表于 2013-12-18 10:32:20

Keke 发表于 2013-12-18 09:57 static/image/common/back.gif
我没有写过RFID,但只要两个设备都不是阻塞式的,轮询应该是可以搞定的。同一个循环里面依次读取两个设备不 ...

主要是两个都是串口通讯,比如手机调用蓝牙查找RFID卡的时侯需要发送串口信息是这样的字节数组{0x40,0x07,0x00,0x01,0x00,0x00,0x00,0x0D},RFID卡收到这个以后就开始查卡,查到后会以0x40,0x07,0x00,0x00,0x08,0x04,0x00,0x08,0x04,0x1C,0x4F,0xBE,0xA7,0x2F,0x0D,0x0D这么一长串返回给蓝牙,其中07表示查卡功能,07后面的00表示检索到卡,后面跟的0x1C,0x4F,0xBE,0xA7就是卡号,FF表示未检索到卡,此时后面就没有卡号,长度也发生变化,如果这中间蓝牙又夹杂了读写卡的指令,可能会导致串口输出出现错位而无法识别,看说明是有校验位设计,不过对这个不懂,算了,就那么凑合用吧。

ps:你的蓝牙模块是什么版本的,我买的时侯没注意,买了个2.1的,发现普通9v碳性电池根本带不动,开机一分钟蓝牙底板的灯就黯淡得看不见了,按这个推算,我担心即使用碱性电池也够呛能支撑一天,听说4.0的是低功耗的,不知道你有没有试过效果如何。

Keke 发表于 2013-12-19 15:14:27

我用的是4.0的,不过没怎么测功耗,应该还好吧

雨轩 发表于 2014-10-24 21:03:10

怎么控制6路LED?
页: [1]
查看完整版本: Aruino蓝牙驱动Led灯