在我试图找出问题时,我一直在阅读有关nrf24l01和Arduinos的很多问题和答案。我很确定没有人有这个问题,但我可能错了。这是我的问题:
如果我将发送代码上传到 UNO 而接收代码上传到 NANO ,我会不断收到错误消息。没有任何东西传播。但是,如果我执行相反操作并将发送代码上传到 NANO 并将接收代码上传到 UNO ,一切都很好......我一直在抓我的在没有任何想法的情况下连续几天,我想得到其他人的意见,因为我没有想法......
我尝试了不同的nrf24l01模块(我大约20个),看看是否有人炒了。还是一样的。尝试换到不同的针脚......仍然是一样的。改变了代码,使其更简单,更简单,缩小范围......仍然是一样的。也许它需要更多的扫描能力而不是发送一个包而且Nano的3.3v还不够?我非常怀疑......
如果你们能解决这个问题,我真的很好奇。我想我提供了很多信息。如果您需要更多,请随时询问。
这是我的设置:
Arduino Nano:
以下是printDetails()
函数的日志:
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xb01dfacece 0xb01dfacece
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xb01dfacece
RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x02
RF_CH = 0x73
RF_SETUP = 0x07
CONFIG = 0x0e
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MAX
Arduino Uno:
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xb01dfacece 0xb01dfacece
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xb01dfacece
RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x02
RF_CH = 0x73
RF_SETUP = 0x07
CONFIG = 0x0e
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MAX
这是Receiver代码:
#include <SPI.h>
#include "RF24.h"
#include "nRF24L01.h"
#include "printf.h"
RF24 myRadio (7,8);
const uint64_t pipe = 0xB01DFACECEL;
struct package
{
int id=0;
int code = 0;
char text[100] = "";
};
typedef struct package Package;
Package data;
void setup() {
Serial.begin(115200);
printf_begin();
delay(1000);
myRadio.begin();
myRadio.setChannel(115);
myRadio.openReadingPipe(1,pipe);
myRadio.printDetails();
myRadio.startListening();
Serial.println("Set-Up Done");
delay(1000);
}
void loop() {
if(myRadio.available())
{
while(myRadio.available())
{
myRadio.read(&data, sizeof(data));
Serial.print("\nPackage");
Serial.println(data.id);
Serial.println(data.code);
Serial.println(data.text);
}
}
delay(500);
}
以下是发送代码:
#include <SPI.h>
#include "RF24.h"
#include "nRF24L01.h"
#include "printf.h"
RF24 myRadio (7,8);
const uint64_t pipe = 0xB01DFACECEL;
struct package
{
int id=1;
int code = 2;
char text[100] = "text";
};
typedef struct package Package;
Package data;
void setup() {
Serial.begin(9600);
printf_begin();
delay(1000);
myRadio.begin();
myRadio.setChannel(115);
myRadio.openWritingPipe(pipe);
myRadio.setRetries(15,15);
myRadio.printDetails();
myRadio.stopListening();
Serial.println("Set-Up Done");
delay(1000);
}
void loop() {
if(!myRadio.write(&data, sizeof(data)))
{
Serial.println("error!!");
myRadio.printDetails();
}
Serial.print("\nPackage");
Serial.println(data.id);
Serial.println(data.code);
Serial.println(data.text);
data.id += 1;
data.code += 1;
delay(3000);
}
答案 0 :(得分:0)
尝试在每个nRF24L01模块的+ 3.3v和gnd上放置一个10uf电容。
这些模块需要大量的发射功率,电容器可以帮助它们。我希望它适合你。
答案 1 :(得分:0)
尝试在每个nRF24L01模块的+ 3.3v和gnd上放置一个10uf电容。
如果这样做不起作用,请将nrf24l01从自己的电源上运行,3.3v,但已经看到这些峰值为1A!发送爆发。可怜的Nano 3.3V来自FT232芯片,只有50mA可用。