hui92984 发表于 2013-10-5 16:21:19

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

本帖最后由 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 )
int data;
float S1;
float S2;
float S3;
char S1C;
char S2C;
char S3C;
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);
}

学慧放弃 发表于 2013-10-5 20:17:30

测试的效果怎样啊 ??

maxims 发表于 2013-10-6 11:45:17

mark回家看看

hui92984 发表于 2013-10-8 09:14:55

求解答!!!!

hui92984 发表于 2013-10-8 17:37:33

这几天人气很差呢

hui92984 发表于 2013-10-10 21:13:54

maxims 发表于 2013-10-6 11:45 static/image/common/back.gif
mark回家看看

回家了吗!

maxims 发表于 2013-10-13 15:23:29

hui92984 发表于 2013-10-10 21:13 static/image/common/back.gif
回家了吗!

{:3_55:}我是来学习的,不是高手哇。。。

路口农夫 发表于 2015-9-4 15:54:07

你好,你的问题解决了吗?想请问一下怎么通过24L01发送float类型的数据呢?

翔叶 发表于 2016-1-27 23:55:41

“接收端感觉有数据重复接收的情况”:其实是发送端重复发送的原因。两个NRF模块之间有自己的容错机制。当发送端发送一次数据后如果没有发生发送完成中断,就会继续重复发送,重复发送次数及重发时间间隔可以在SETUP_RETR寄存器中设置。可以吧该寄存器设置为0x00来临时解决这个问题。要想根本解决问题还要继续检查。
页: [1]
查看完整版本: 请教一个nrf24l01接受数据 的问题!!困扰很久了!