上次介绍了NRF52840发送数据给手机,这次介绍使用手机发送控制指令给NRF52840,同时使用PWM控制LED灯。
首先要介绍下PWM,脉冲宽度调制(Pulse width modulation,PWM)技术,通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。如果将PWM输出给LED灯,也就可以来控制LED的亮度。PWM的用处远不止控制LED灯亮度,例如控制舵机角度,电机转速等等的。
NRF52840芯片具有4个PWM通道,每个通道又最多可以有4个PWM输出实例,也就是说NRF52840可以最多同时控制16个LED的亮度。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,连接发送入0到100的字符,可以看到LED1与LED2会根据输入的数字大小改变亮度。
源代码:https://github.com/digiic/NRF52840
例程位置:nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_uart_led control
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖