初级会员
- 积分
- 65
- 金钱
- 65
- 注册时间
- 2016-3-31
- 在线时间
- 25 小时
|
8金钱
本帖最后由 slanpo 于 2016-6-29 23:27 编辑
简单看了下原子哥的例程,看不懂的地方太多,简单调试了使用arduino+NRF24L01 发送, 探索者+NRF24L01 接收, 失败。不知道错在哪儿。列出问题,希望大家拉一把小白!
1、arduino中使用的Mirf库,只有简单的基本设置,如接收端ID设置:Mirf.setTADDR((byte *)"Rec01"); //16进制就是 0x52,0x65,0x63,0x30,0x31
这样我在战舰中修改:const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x52,0x65,0x63,0x30,0x31};
const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x52,0x65,0x63,0x30,0x31};
//原来是{0x34,0x43,0x10,0x10,0x01};代表4C???是这个意思吗???
2、STM32中:NRF24L01_RX_Mode(); 不知道还有那些需要修改的不?
3、arduino中我把通道修改成了 40,因为我以为例程使用的就是通道40.NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);
修改了以上几处,通信不成功,不知道如何设置调通,使用的是原子的NRF24L01模块。
arduino中程序:
nRF24L01 Arduino发送端
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup()
{
Serial.begin(9600);
Mirf.cePin = 9; //设置CE引脚为D9
Mirf.csnPin = 10; //设置CE引脚为D10
Mirf.spi = &MirfHardwareSpi;
Mirf.init(); //初始化nRF24L01
//设置接收标识符"Sen01"
Mirf.setRADDR((byte *)"Sen01");
// Mirf.payload = sizeof(unsigned int);
Mirf.payload = 32;
//发送通道,可以填0~128,收发必须一致。
Mirf.channel = 40;
Mirf.config();
// Mirf.configRegister(RF_CH,40);
Mirf.configRegister(RF_SETUP,0x0f);
//注意一个Arduino写Sender.ino,另一个写Receiver.ino。
//这里标识写入了Sender.ino
Serial.println("I'm Sender...");
}
unsigned int adata = 0;
void loop()
{
//设置向"serv1"发送数据
Mirf.setTADDR((byte *)"Rec01");
Sends("hello hello hello hello hello he");//32
// Mirf.
//while死循环等待发送完毕,才能进行下一步操作。
while(Mirf.isSending()) {}
delay(20);
}
void Sends(char *str)
{
int lens;
lens=strlen(str);
char msg[lens];
int i;
for (i=0;i<lens;i++)
{
msg= int(str);
}
Mirf.send((byte *)&msg);
while(Mirf.isSending()){}
}
|
|