arduino的nrf24L01收发通信

最近弄了两个nrf24l01的模块,想试试之后往智能家居上用,正好之前有一个小车用来验证导航算法的,还有一个小四轴的控制手柄,所以萌生了结合三者弄个遥控车玩一玩。小四轴基于STC15系列主控,51架构,而小车主控是arduino平台,那么nrf24l01的代码就需要分开写。nrf24l01采用SPI总线通信,虽然占引脚数多,但是收发速度快,模块通信速率可达2Mbps,而功耗控制在待机22uA,如果掉电模式可以仅900nA,如果其余传感器功耗控制合理,用干电池驱动整个模块工作数月了,这可是其他通信模块不具备的特性,高速低耗,2.4Ghz的抗干扰能力也不错,穿透性稍差,但是家庭环境使用还是够的。

官方给了C语言的库,先拿两个51单片机试了下,OK,再从网上下载了arudino的库,试了下,???无法收发,换个库,还是不行,纳闷了,对照手册看源码,经过数次修改,始终不能成功,手册我都看的快背下来了。遂放弃,想到51版本的可以用,那就根据51版本的改过来用呗,首先是基本的预处理宏定义,这个可以照搬,对照手册没有问题:

RF24_config.h:

然后照搬一个模块寄存器宏定义、引脚宏定义,nRF24L01.h:

然后是与模块通信的代码:类class RF24,头文件如下:

实现根据c51版本的改:

函数名都可以顾名思义,所以不必细说,实际用的时候可以直接引用,看调用方法:

接收与发射类似:

经测试,OK。那既然两个平台都通了,可以试试在遥控器和小车上了。小四轴遥控器原本用的就是nrf24L01,将两个摇杆的位置信息映射到0~255的uchar类型,那么小车上只需要将nrf24L01模块地址设置为相同的接收地址,解析对应通道数据并转换成速度信息即可。由于理论上摇杆回中对应的值为128,但是实际摇杆回中值会有个浮动,导致当我没控制摇杆,即摇杆处于回中状态时小车会低速运动,因此,做个判断,将128附近值屏蔽,控制代码如下:

代码很简单,不多说,command数组保存了全部数据,其中第4、5字节为左右、前后速度控制值。

arduino 控制nrf24l01的源码:

https://github.com/atp798/BlogStraka/tree/master/ArduinoNrf24l01

发表评论