iOS设备与蓝牙4.0应用例程之 三色灯控制(PWM控制)

来源:互联网 发布:人工智能国际期刊 编辑:程序博客网 时间:2024/04/27 16:25

蓝牙4.0 技术交流讨论群 : 228014986

本节主要讲解蓝牙模块的AT指令,以及iOS设备通过调用at指令达到控制效果:

需要准备的硬件:

1. zbmodule 蓝牙4.0模块

2. Arduino开发板 

3. BLE Shield 蓝牙4.0 背板 

BLE Shield 蓝牙4.0 背板上除了能跟arduino通信外,还对ZBModule蓝牙4.0模块上接口作了扩展

包括3路pwm 用三色led灯链接 1路adc 用可调电阻链接 1个物理按键。

可以供我们更加直观的体会背板提供的扩展AT指令功能。

模块AT指令是模块自身的一些特色功能,对于一些简单的应用,可以不用增加单片机的情况下,

直接达到iOS设备对底层硬件控制的效果。

ZBModule PWM AT指令:

首先先普及一下PWM的知识:http://baike.baidu.com/view/631384.htm?fromId=168039 百度百科介绍的很全,我就不复制粘贴了。

PWM里面一个概念是占空比,就是高电平占据整个周期的时间。详见http://baike.baidu.com/view/201672.htm

它的用途很多,但是最常用的功能是调节“能量”大小:
一个周期内,高电平(或者低电平)时间的长短,直接关系到后端电路导通(断开)的时间。
其表现就是灯光的强弱,马达转速的高低等等。
当然PWM还有很多其他的用法,之后也可以慢慢接触到。

ZBModule的PWM特性:
首先ZBModule 支持4路PWM AT指令控制
AT 指令格式: HEADER1 HEADER2 LENGTH CMD <n> CHK TAIL
HEADER1 HEADER2 包头
LENGTH 命令长度
CMD 命令字
<n> 为命令参数
CHK 为校验和 CHK=(CMD+PAYLOAD1+..PAYLOADn)&0xFF
TAIL 为包尾

实际命令:

0xA5 0xA3 0x02 0x02 0xnn 0xtt 0xchk 0x5a

其中 0xA5 0xA3 为包头 表明是at指令
0x02 为长度
0x02 为命令
0xnn pwm通道号(1<=nn<=4)分别控制RGB三种颜色灯
0xtt pwm占空比(1<=tt<=99)值越大越亮
chk  为校验和

0x5a 为包尾


详细代码参见:

https://github.com/kitabc/TricolorLight

可执行app在QQ群共享里面

[plain] view plaincopy
  1. - (IBAction)doLedSliderChanged:(id)sender { //滑条响应函数,在里面向下发送AT指令  
  2.       
  3.     UISlider *mSlider  = (UISlider*)sender;  
  4.       
  5.     uint8_t cmdBuf[16] = {0};  
  6.     uint8_t channelNo  = 0;  
  7.     uint8_t duty = 0;  
  8.       
  9.     cmdBuf[0] = 0xa5;//HEADER1  
  10.     cmdBuf[1] = 0xa3;//HEADER3  
  11.     cmdBuf[2] = 0x02;//LENGTH  
  12.     cmdBuf[3] = 0x02;//CMD  
  13.       
  14.     switch (mSlider.tag) {  
  15.               
  16.         case 1001:  
  17.             //NSLog(@"R");  
  18.             channelNo = 3; //通道号  
  19.             duty = (uint8_t)(mSlider.value*99);  
  20.             break;  
  21.               
  22.         case 1002:  
  23.             // NSLog(@"G");  
  24.             channelNo = 2;  
  25.             duty = (uint8_t)(mSlider.value*99);  
  26.             break;  
  27.               
  28.         case 1003:  
  29.             // NSLog(@"B");  
  30.             channelNo = 4;  
  31.             duty = (uint8_t)(mSlider.value*99);  
  32.             break;  
  33.               
  34.         default:  
  35.             break;  
  36.     }  
  37.       
  38.     if(channelNo!= 0)  
  39.     {  
  40.         cmdBuf[4] = channelNo;//PWM channel  
  41.         cmdBuf[5] = duty;//PWM duty  
  42.         cmdBuf[6] = 0x00;  
  43.         cmdBuf[7] = 0x5a;//TAIL  
  44.         NSData *adata = [[NSData alloc] initWithBytes:cmdBuf length:16];  
  45.           
  46.         if(t.activePeripheral != nil)  
  47.         {  
  48.             [t writeDataToSscomm:adata];  
  49.         }  
  50.           
  51.     }  
  52. }  

代码基本跟之前的透传代码差不多,只是把之前的透明传输换成命令而已,

有了PWM我们以后就可以自己:控制灯光,遥控小车,控制舵机.........

蓝牙4.0 技术交流讨论群 : 228014986


原创粉丝点击