hui92984 发表于 2013-9-25 15:24:32

关于arduino和nrf24l01的问题!!!

本帖最后由 hui92984 于 2013-9-25 15:28 编辑

闲来无事研究下NRF24L01的通讯,
以下是arduino的代码,但是使用中有个问题,就是发送端的字符串不管有多长,接收端只能显示最后一位字符,不知道什么问题!




发送端代码


#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"



void setup(){
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;//加载24L01SPI
Mirf.init();                                 //开始
   Mirf.setTADDR((byte *)"serv1");//发送到"接收地址"
Mirf.payload = sizeof(char);         
   Mirf.config();   
}
void loop()
{
char words='asd';
Mirf.send((byte *)&words);
   delay(100);            
}



接收端代码


#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
char data;
void setup(){   

Mirf.spi = &MirfHardwareSpi;          //加载24L01SPI
Mirf.init();
Mirf.setRADDR((byte *)"serv1"); //接收地址" "
Mirf.payload = sizeof(char);            //数据类型(整数)
Mirf.config();
Serial.begin(9600);
   
}

void loop(){
if(Mirf.dataReady())
{                        //如果接收到数据则执行
   Mirf.getData((byte *)&data);   //接收数据
   Mirf.rxFifoEmpty();   //清理24L01援存
   delay(90);
    Serial.println(data);
    }
   
}

mxhhaixin 发表于 2013-9-25 16:37:44

是你的载荷宽度Mirf.payload设置的问题。Nrf24L01每次发送的数据长度是由Mirf.payload决定的。你把 Mirf.payload = sizeof(char);改成Mirf.payload = 3;就可以一次发送和接受三个字符了。

mxhhaixin 发表于 2013-9-25 16:40:04

本帖最后由 mxhhaixin 于 2013-9-25 16:49 编辑

还有程序中这句char words='asd'; 也有问题。'asd'不是合法的字符常量。接收端程序中data变量也要做改动。要想一次接收多个字符,就不能用char data;改成char data;

hui92984 发表于 2013-9-26 21:15:08

mxhhaixin 发表于 2013-9-25 16:40 static/image/common/back.gif
还有程序中这句char words='asd'; 也有问题。'asd'不是合法的字符常量。接收端程序中data变量也要做改动。要 ...

要用数组是吗

mxhhaixin 发表于 2013-9-26 22:46:47

使用char类型的数组,如 char words[]="asd";。

wunanyx 发表于 2013-9-27 00:17:26

mxhhaixin 发表于 2013-9-25 16:40 static/image/common/back.gif
还有程序中这句char words='asd'; 也有问题。'asd'不是合法的字符常量。接收端程序中data变量也要做改动。要 ...

请问无线数传最多支持多少个字节的字符串传输,换句话的意思字符串数组的维度最大是多大?有限制吗?

mxhhaixin 发表于 2013-9-27 08:16:16

32个字节。如果要传输长字符串的话,可以把Mirf.payload设为1,每次发送一个字符,在接收端再组合成字符串。

hui92984 发表于 2013-9-27 18:34:03

mxhhaixin 发表于 2013-9-27 08:16 static/image/common/back.gif
32个字节。如果要传输长字符串的话,可以把Mirf.payload设为1,每次发送一个字符,在接收端再组合成字符串。 ...

谢谢哥们的回答,方便留下你的QQ吗!

hui92984 发表于 2013-9-28 09:51:51

如果使用 char words[]="asd" 接收端只能接收到第一个字符‘a“ 这又是咋回事!!!

天命难违 发表于 2015-8-13 18:25:00

:(:(:(为什么我的不行的,也是同样的程序
页: [1]
查看完整版本: 关于arduino和nrf24l01的问题!!!