|
|
本帖最后由 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
|