概述
原创:如果你已经找这个半天了,而且已经研究了一些时间,但还是无法完成两个Arduino之间的通信的话,不妨看一下这篇文章。建议收藏!
具体的程序,请看下面:
//发射端:按钮控制信号+LED显示
//引入库文件
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
RF24 radio(7,8); //设置 CE 为针脚7,CSN为针脚8
//CE:模式控制线。在 CSN为低的情况下,CE 协同CONFIG 寄存器共同决定NRF24L01 的状态//CSN:SPI片选线
const byte address[6] = “00001”; //通讯通道地址,可以为任意的5个字符串,但需要和接收端通道地址一致。
int Button = 4; // 定义针脚4的名字为Button
int Led = 5 ; // 定义针脚5的名字为Led
void setup()
{
SPI.begin(); //将SPI总线进行初始化,即将SCK(Pin13),MOSI(Pin11)和CSN(Pin10)默认引脚设置
//为输出模式,并将SCK和MOSI设置为低电平,CSN为高电平。
Serial.begin(115200);//设置串口波特率为115200
radio.begin(); //启动nRF模组
radio.setChannel(90); //修改频道,0~127
radio.openWritingPipe(address); //设定通道地址,即发送数据的接收端的地址
//radio.setRetries(15,15); //设置重传次数以及每次重传的延迟.多次重试需要等待多长时间。
//0:250微妙;15:4000微妙
radio.setDataRate(RF24_250KBPS);// 设置传输速率发射端设置RF24_250KBPS,还有RF24_1MBPS,RF24_2MBPS
//nRF24L01同时支持250kbps和1Mbps的数传传输速率,当其它应用参数一致时,两种数据传
//输速率实际测的通讯距离相差很大。低速率的250kbps通讯距离至少在高速率的1Mbps的2倍
radio.setPALevel(RF24_PA_MIN); //设定传输功率, 发射功率 RF24_PA_MIN=-18dBm
radio.stopListening(); //停止侦听,设定成发射模式
pinMode(Button,INPUT_PULLUP); // 把Button按钮的连接的针脚电平上拉
pinMode(Led,OUTPUT); //把Led的针脚设置为输出状态
}
void loop()
{
int ButtonValue = digitalRead(Button); //把Button读取的数据保存在ButtonValue
if(ButtonValue == 1) //如果ButtonValue值为1
{
radio.write(&ButtonValue, sizeof(ButtonValue)); //使用radio.write()函数将数据发送出去
digitalWrite(Led,HIGH); //点亮Led灯
Serial.println(ButtonValue);//在串口监视器打印ButtonValue值,并回车
delay(1000); // 延迟1秒
}
if(ButtonValue == 0) //如果ButtonValue值为0
{
radio.write(&ButtonValue, sizeof(ButtonValue)); //使用radio.write()函数将数据发送出去
digitalWrite(Led,LOW);//熄灭Led灯
Serial.println(ButtonValue);//在串口监视器打印ButtonValue值,并回车
delay(1000); // 延迟1秒
}
}
//接收端 LED
//引入库文件
#include <SPI.h>
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
RF24 radio(7,8); //设置 CE 为针脚7,CSN为针脚8
const byte address[6] = “00001”;
//通讯通道地址,可以为任意的5个字符串,但需要和接收端通道地址一致。
int ButtonValue; // 定义ButtonValue为整型变量
int Led = 6; // 定义针脚6的名字为Led
void setup() {
SPI.begin(); //将SPI总线进行初始化,即将SCK(Pin13),MOSI(Pin11)和CSN(Pin10)默认引脚设置
//为输出模式,并将SCK和MOSI设置为低电平,CSN为高电平。
Serial.begin(115200);//设置串口波特率为115200
radio.begin(); //启动nRF模组
radio.setChannel(90); //修改频道,0~127
//radio.setRetries(15,15);//设置重传次数以及每次重传的延迟.多次重试需要等待多长时间。
//0:250微妙;15:4000微妙
radio.setDataRate(RF24_250KBPS);// 设置传输速率发射端设置RF24_250KBPS,还有RF24_1MBPS,RF24_2MBPS
//nRF24L01同时支持250kbps和1Mbps的数传传输速率,当其它应用参数一致时,两种数据传
//输速率实际测的通讯距离相差很大。低速率的250kbps通讯距离至少在高速率的1Mbps的2倍
radio.openReadingPipe(0, address);
//设置与发射端相同的地址,并以此方式启用两个模块之间的通信
radio.setPALevel(RF24_PA_MIN); //设定传输功率, 发射功率 RF24_PA_MIN=-18dBm
radio.startListening(); //开始侦听,设定成接收模式
pinMode(Led,OUTPUT); //设置Led为输出状态
}
void loop() {
if (radio.available())//检查是否有可用的数据
{
radio.read(&ButtonValue, sizeof(ButtonValue));//读取信号,用radio.read()函数将数据接收
if(ButtonValue == 1)//如果ButtonValue值为1
{
digitalWrite(Led,HIGH);//点亮Led灯
Serial.println(ButtonValue);//在串口监视器打印ButtonValue值,并回车
delay(1000); // 延迟1秒
}
if(ButtonValue == 0)//如果ButtonValue值为0
{
digitalWrite(Led,LOW);//熄灭Led灯
Serial.println(ButtonValue);//在串口监视器打印ButtonValue值,并回车
delay(1000); // 延迟1秒
}
}
}
最后
以上就是哭泣服饰为你收集整理的Arduino和nRF24L01的通信的全部内容,希望文章能够帮你解决Arduino和nRF24L01的通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复