gdgzwqz 发表于 2017-8-1 22:53 下载好的能不能分享一下 |
| 楼主您好!我今天也碰巧搞这个模块,不过好像存在些问题,接线没有问题。C:\Users\Administrator\DesktopC:\Users\Administrator\Desktop |
| 下载一个看看 |
| 学习一下 |
我也点“后退”结果造成重复下载被重复扣了5分!!!![]() ![]() ![]() |
|
I'm Receiver... 没有然后了 ![]() |
用的库里带的事例,一直这样![]() ![]() Beginning ... Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending |
| 请问下怎样实现两个边发送 边接收 |
|
我下载了再次,扣了我再次5分!!!!!!冤枉啊!!!!!!!!! |
| 丢包多数是信号强度不够,你看设置有问题没,简单办法可以试试降低速率,如果可以就是这样的问题 |
| 支持一个,我用RF24丢包好严重,不懂是什么问题 |
这个是别人写的多通道发送端程序,更改地址,但是只有03号地址才能用为啥?
|
| 有一对多的代码吗? |
| 很不错的教程,学习了 |
| 参照了您的写法,一对一成功了,请问一对多如何改写 |
|
1) 终于成功测试成功。 不过网上的MIRF 库有多个版本的,我用上老的版本· https://github.com/aaronds/arduino-nrf24l01 2) 设置CE CSN引脚也很方便可以用以下指令 Mirf.cePin = 9; Mirf.csnPin = 10 3) 范例开始的这段漏了 #include #include #include #include , 后来查了一下应该是 #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> |
| 相当不错的教程 |
| 教程真的不错。 |
|
问题解答: 楼主你好,我想请教下,如果一次发送多个传感器的数据该怎么改呢?我试着改了一下你的程序,但是只能接收到第一个传感器的数据,第二个传感器的数据一直不对,能帮我看下吗?谢谢了 发送端程序 #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> void setup() { Serial.begin(9600); Mirf.cePin = 8; //设置CE引脚为D9 Mirf.csnPin = 7; //设置CE引脚为D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //设置接收标识符"Sen01" Mirf.setRADDR((byte *)"Sen01"); Mirf.payload = sizeof(unsigned int); Mirf.channel = 3; Mirf.config(); //注意一个Arduino写Sender.ino,另一个写Receiver.ino。 //这里标识写入了Sender.ino Serial.println("I'm Sender..."); } unsigned int adata = 0; unsigned int bdata = 0; void loop() { //读取A0值到adata adata = analogRead(A0); bdata = analogRead(A1); //由于nRF24L01只能以byte单字节数组形式发送Mirf.payload个数据, //所以必须将所有需要传输的数据拆成byte。 //下面定义byte数组,存放待发数据,因为Mirf.payload = sizeof(unsigned int); //实际下面等于byte data[2]; byte data[Mirf.payload]; //adata是unsigned int双字节数据,必须拆开。 //将adata高低八位拆分: data[0] = adata & 0xFF; //低八位给data[0], data[1] = adata >> 8; //高八位给data[1]。 data[2] = bdata & 0xFF; //低八位给data[0], data[3] = bdata >> 8; //设置向"serv1"发送数据 Mirf.setTADDR((byte *)"Rec01"); Mirf.send(data); //while死循环等待发送完毕,才能进行下一步操作。 while(Mirf.isSending()) {} Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); delay(3000); } 接收端程序: #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> //定义一个变量adata存储最终结果,oldadata存储旧结果,防止相同结果刷屏。 unsigned int adata = 0, bdata = 0; void setup() { Serial.begin(9600); //---------初始化部分,不可随时修改--------- Mirf.cePin = 8; //设置CE引脚为D9 Mirf.csnPin = 7; //设置CE引脚为D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //---------配置部分,可以随时修改--------- //设置接收标识符"Rev01" Mirf.setRADDR((byte *)"Rec01"); //设置一次收发的字节数,这里发一个整数, //写sizeof(unsigned int),实际等于2字节 Mirf.payload = sizeof(unsigned int); //发送通道,可以填0~128,收发必须一致。 Mirf.channel = 3; Mirf.config(); //注意一个Arduino写Sender.ino,另一个写Receiver.ino。 //这里用来辨别写入了Receiver.ino程序 Serial.println("I'm Receiver..."); } void loop() { //定义一个暂存数组,大小为Mirf.payload。 byte data[Mirf.payload]; if(Mirf.dataReady()) //等待接收数据准备好 { Mirf.getData(data); //接收数据到data数组 //data[1]<左移8位与data[0]并,重组数据。 adata = (unsigned int)((data[1] << 8) | data[0]); bdata = (unsigned int)((data[3] << 8) | data[2]); Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); } } 求指教,十分感谢! ----------------------------------------------- 答: 你在可以这样修改: 发送端程序 #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> void setup() { Serial.begin(9600); Mirf.cePin = 8; //设置CE引脚为D9 Mirf.csnPin = 7; //设置CE引脚为D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //设置接收标识符"Sen01" Mirf.setRADDR((byte *)"Sen01"); Mirf.payload = sizeof(unsigned int);//在这把2 修改成4 Mirf.channel = 3; Mirf.config(); //注意一个Arduino写Sender.ino,另一个写Receiver.ino。 //这里标识写入了Sender.ino Serial.println("I'm Sender..."); } unsigned int adata = 0,bdata = 0; void loop() { //读取A0值到adata adata = analogRead(A0); bdata = analogRead(A1); //由于nRF24L01只能以byte单字节数组形式发送Mirf.payload个数据, //所以必须将所有需要传输的数据拆成byte。 //下面定义byte数组,存放待发数据,因为Mirf.payload = sizeof(unsigned int); //实际下面等于byte data[2]; byte data[Mirf.payload]; //adata是unsigned int双字节数据,必须拆开。 //将adata高低八位拆分: data[0] = adata & 0xFF; //低八位给data[0], data[1] = adata >> 8; //高八位给data[1]。 data[2] = bdata & 0xFF; //低八位给data[0], data[3] = bdata >> 8; //设置向"serv1"发送数据 Mirf.setTADDR((byte *)"Rec01"); Mirf.send(data); //while死循环等待发送完毕,才能进行下一步操作。 while(Mirf.isSending()) {} Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); delay(3000); } 接收端程序: #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> //定义一个变量adata存储最终结果,oldadata存储旧结果,防止相同结果刷屏。 unsigned int adata = 0, bdata = 0; void setup() { Serial.begin(9600); //---------初始化部分,不可随时修改--------- Mirf.cePin = 8; //设置CE引脚为D9 Mirf.csnPin = 7; //设置CE引脚为D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //---------配置部分,可以随时修改--------- //设置接收标识符"Rev01" Mirf.setRADDR((byte *)"Rec01"); //设置一次收发的字节数,这里发一个整数, //写sizeof(unsigned int),实际等于2字节 Mirf.payload = sizeof(unsigned int);//在这把2 修改成4 //发送通道,可以填0~128,收发必须一致。 Mirf.channel = 3; Mirf.config(); //注意一个Arduino写Sender.ino,另一个写Receiver.ino。 //这里用来辨别写入了Receiver.ino程序 Serial.println("I'm Receiver..."); } void loop() { //定义一个暂存数组,大小为Mirf.payload。 byte data[Mirf.payload]; if(Mirf.dataReady()) //等待接收数据准备好 { Mirf.getData(data); //接收数据到data数组 //data[1]<左移8位与data[0]并,重组数据。 adata = (unsigned int)((data[1] << 8) | data[0]); bdata = (unsigned int)((data[3] << 8) | data[2]); Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); } } |