请教一个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);
}
测试的效果怎样啊 ?? mark回家看看 求解答!!!! 这几天人气很差呢 maxims 发表于 2013-10-6 11:45 static/image/common/back.gif
mark回家看看
回家了吗! hui92984 发表于 2013-10-10 21:13 static/image/common/back.gif
回家了吗!
{:3_55:}我是来学习的,不是高手哇。。。 你好,你的问题解决了吗?想请问一下怎么通过24L01发送float类型的数据呢? “接收端感觉有数据重复接收的情况”:其实是发送端重复发送的原因。两个NRF模块之间有自己的容错机制。当发送端发送一次数据后如果没有发生发送完成中断,就会继续重复发送,重复发送次数及重发时间间隔可以在SETUP_RETR寄存器中设置。可以吧该寄存器设置为0x00来临时解决这个问题。要想根本解决问题还要继续检查。
页:
[1]