极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18044|回复: 9

关于arduino和nrf24l01的问题!!!

[复制链接]
发表于 2013-9-25 15:24:32 | 显示全部楼层 |阅读模式
本帖最后由 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;  //加载24L01  SPI
  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;          //加载24L01  SPI
  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);
    }
   
}

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-9-25 16:37:44 | 显示全部楼层
是你的载荷宽度Mirf.payload设置的问题。Nrf24L01每次发送的数据长度是由Mirf.payload决定的。你把 Mirf.payload = sizeof(char);改成Mirf.payload = 3;就可以一次发送和接受三个字符了。
回复 支持 反对

使用道具 举报

发表于 2013-9-25 16:40:04 | 显示全部楼层
本帖最后由 mxhhaixin 于 2013-9-25 16:49 编辑

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

使用道具 举报

 楼主| 发表于 2013-9-26 21:15:08 | 显示全部楼层
mxhhaixin 发表于 2013-9-25 16:40
还有程序中这句char words='asd'; 也有问题。'asd'不是合法的字符常量。接收端程序中data变量也要做改动。要 ...

要用数组是吗
回复 支持 反对

使用道具 举报

发表于 2013-9-26 22:46:47 | 显示全部楼层
使用char类型的数组,如 char words[]="asd";。
回复 支持 反对

使用道具 举报

发表于 2013-9-27 00:17:26 | 显示全部楼层
mxhhaixin 发表于 2013-9-25 16:40
还有程序中这句char words='asd'; 也有问题。'asd'不是合法的字符常量。接收端程序中data变量也要做改动。要 ...

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

使用道具 举报

发表于 2013-9-27 08:16:16 | 显示全部楼层
32个字节。如果要传输长字符串的话,可以把Mirf.payload设为1,每次发送一个字符,在接收端再组合成字符串。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-27 18:34:03 | 显示全部楼层
mxhhaixin 发表于 2013-9-27 08:16
32个字节。如果要传输长字符串的话,可以把Mirf.payload设为1,每次发送一个字符,在接收端再组合成字符串。 ...

谢谢哥们的回答,方便留下你的QQ吗!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-28 09:51:51 | 显示全部楼层
如果使用 char words[]="asd" 接收端只能接收到第一个字符‘a“ 这又是咋回事!!!
回复 支持 反对

使用道具 举报

发表于 2015-8-13 18:25:00 | 显示全部楼层
为什么我的不行的,也是同样的程序
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 02:55 , Processed in 0.038072 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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