极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24175|回复: 8

请教一个nrf24l01接受数据 的问题!!困扰很久了!

[复制链接]
发表于 2013-10-5 16:21:19 | 显示全部楼层 |阅读模式
本帖最后由 hui92984 于 2013-10-5 19:54 编辑

请教各位我做一个NRF24L01发送模拟口数值的东东,现在的问题是接收端感觉有数据重复接收的情况,具体症状见下午:
我设计的是发射端读取A0\A1\A2端口的模拟量直接发送给接收端来进行一个计算,
可能我表达的不是特别清楚,我举个例子:
假设发送端:
A0读取数值:S1
A1读取数值:S2
A2读取数值:S3
接收端接受到这三个数值后,因为要显示在12864上面,所以要转换成字符串(我是用dtostrf函数来转换的),转换后我用Serial.print打印出3组数据后就出现如下状况:


第一组数据                  第二组数据                      第三组数据
S1/S2/S3                         S2/S3                               S3

感觉有重叠现象,不知道为什么,但是如果我不用dtostrf进行转换 直接打印数值,就没问题,请教这事神马情况!!!
发送端
======================

#include "SPI.h"
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
int S1;
int S2;
int S3;
void setup(){
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setTADDR((byte *)"serv1");
  Mirf.payload = sizeof(int);
  Mirf.config();
}

void loop()
{
    S1=analogRead(A0);
    S2=analogRead(A1);
    S3=analogRead(A2);
    S2=S2+2000;
    S3=S3+4000;
    Mirf.send((byte *)&S1);
    while(Mirf.isSending()){}
    Mirf.send((byte *)&S2);
    while(Mirf.isSending()){}
    Mirf.send((byte *)&S3);
    while(Mirf.isSending()){}
    delay(2000);
    }



接收端
======================


#include "LCD12864RSPI.h"
#include "SPI.h"
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
int data;
float S1;
float S2;
float S3;
char S1C[4];
char S2C[4];
char S3C[4];
void setup()
{
  LCDA.Initialise();
  delay(100);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"serv1");
  Mirf.payload = sizeof(int);
  Mirf.config();
  Serial.begin(9600);
}


void loop()
{
  if(Mirf.dataReady())
  {
    Mirf.getData((byte *)&data);
    Mirf.rxFifoEmpty();
    if(data>=0&&data<=1023)
    {
      S1=data*(5.0/1023.0)*3;
      dtostrf(S1,4,2,S1C);
    }
    if(data>=2000&&data<=3023)
    {
      S2=(data-2000)*(5.0/1023.0)*3/2;
      dtostrf(S2,4,2,S2C);
    }
    if(data>=4000&&data<=5023)
    {
      S3=(data-4000)*(5.0/1023.0);
      dtostrf(S3,4,2,S3C);
    }
  }
  Serial.print(S1C);
  Serial.print("---");
  Serial.print(S2C);
  Serial.print("---");
  Serial.println(S3C);
  delay(500);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-10-5 20:17:30 | 显示全部楼层
测试的效果怎样啊 ??
回复 支持 反对

使用道具 举报

发表于 2013-10-6 11:45:17 来自手机 | 显示全部楼层
mark回家看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-8 09:14:55 | 显示全部楼层
求解答!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-8 17:37:33 | 显示全部楼层
这几天人气很差呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-10 21:13:54 | 显示全部楼层
maxims 发表于 2013-10-6 11:45
mark回家看看

回家了吗!
回复 支持 反对

使用道具 举报

发表于 2013-10-13 15:23:29 | 显示全部楼层
hui92984 发表于 2013-10-10 21:13
回家了吗!

{:3_55:}我是来学习的,不是高手哇。。。
回复 支持 反对

使用道具 举报

发表于 2015-9-4 15:54:07 | 显示全部楼层
你好,你的问题解决了吗?想请问一下怎么通过24L01发送float类型的数据呢?
回复 支持 反对

使用道具 举报

发表于 2016-1-27 23:55:41 | 显示全部楼层
“接收端感觉有数据重复接收的情况”:其实是发送端重复发送的原因。两个NRF模块之间有自己的容错机制。当发送端发送一次数据后如果没有发生发送完成中断,就会继续重复发送,重复发送次数及重发时间间隔可以在SETUP_RETR寄存器中设置。可以吧该寄存器设置为0x00来临时解决这个问题。要想根本解决问题还要继续检查。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 09:40 , Processed in 0.040670 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表