[原创] 蓝牙DIY——遥控LED亮度
1564 查看
5 回复
 楼主 | 发布于 2019-08-03 | 只看楼主
分享到:

上次介绍了NRF52840发送数据给手机,这次介绍使用手机发送控制指令给NRF52840,同时使用PWM控制LED灯。

        首先要介绍下PWM,脉冲宽度调制(Pulse width modulation,PWM)技术,通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。如果将PWM输出给LED灯,也就可以来控制LED的亮度。PWM的用处远不止控制LED灯亮度,例如控制舵机角度,电机转速等等的。

        NRF52840芯片具有4PWM通道,每个通道又最多可以有4PWM输出实例,也就是说NRF52840可以最多同时控制16LED的亮度。NRF官方库中有PWM的例程,位置为:nRF5_SDK_15.3.0_59ac345\examples\peripheral\pwm_library,官方的介绍

        该例程的效果为LED1灯和LED2灯交替呼吸闪烁。该例程结合之前蓝牙串口例程,就可以DIY出我们这次的遥控LED亮度了。

添加相关函数库

      还是以蓝牙串口为基础,然后在文件树的对应位置添加如下文件:

nrfx_ppi.c

nrf_drv_ppi.c

nrfx_timer.c

app_pwm.c

      然后在sdk_config.h配置文件中开启如下配置:

TIMER_ENABLED 1

TIMER0_ENABLED 1

TIMER1_ENABLED 1

APP_PWM_ENABLED 1

初始化

main.c函数中添加如下的PWM初始化函数,该函数主要是设置PWM的频率输出引脚,通道反向,使能PWM等。


         main.c文件中添加PWM初始化实例和PWM完成回调函数如下。

蓝牙接收函数

蓝牙接收函数的主要作用是,将手机发送过来的字符串数据转化为整形数据,然后输出给PWM通道控制LED的亮度。

应用效果

         将修改的代码编译烧录运行,然后在手机上打开NRF UART APP,连接发送入0100的字符,可以看到LED1LED2会根据输入的数字大小改变亮度。

源代码:https://github.com/digiic/NRF52840

例程位置:nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_uart_led control

 

(2 ) (2 )
回复 举报

回复于 2019-08-04 沙发

感谢分享
(0 )
评论 (0) 举报

回复于 2019-08-05 2#

谢谢,辛苦了。
(0 )
评论 (0) 举报

回复于 2019-08-05 3#

谢谢分享!!!
(0 )
评论 (0) 举报

回复于 2019-08-07 4#

谢谢分享!!!
(0 )
评论 (0) 举报

回复于 2019-08-07 5#

支持下,谢谢分享!
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部