Paderboy 发表于 2015-12-5 13:33:33

三公分阳光 发表于 2015-8-12 00:39 static/image/common/back.gif
楼主你好,我想请教下,如果一次发送多个传感器的数据该怎么改呢?我试着改了一下你的程序,但是只能接收到 ...

你在可以这样修改:

发送端程序
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup()
{
    Serial.begin(9600);

    Mirf.cePin = 8;                //设置CE引脚为D9
    Mirf.csnPin = 7;      //设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();//初始化nRF24L01               

      //设置接收标识符"Sen01"
    Mirf.setRADDR((byte *)"Sen01");
    Mirf.payload = sizeof(unsigned int);//在这把2 修改成4
    Mirf.channel = 3;
    Mirf.config();

      //注意一个Arduino写Sender.ino,另一个写Receiver.ino。
      //这里标识写入了Sender.ino
    Serial.println("I'm Sender...");
}
unsigned int adata = 0,bdata = 0;

void loop()
{
      //读取A0值到adata
    adata = analogRead(A0);
    bdata = analogRead(A1);

    //由于nRF24L01只能以byte单字节数组形式发送Mirf.payload个数据,
    //所以必须将所有需要传输的数据拆成byte。
    //下面定义byte数组,存放待发数据,因为Mirf.payload = sizeof(unsigned int);
    //实际下面等于byte data;
    byte data;

    //adata是unsigned int双字节数据,必须拆开。
    //将adata高低八位拆分:
    data = adata & 0xFF;                //低八位给data,
    data = adata >> 8;    //高八位给data。
    data = bdata & 0xFF;                //低八位给data,
    data = bdata >> 8;
    //设置向"serv1"发送数据
    Mirf.setTADDR((byte *)"Rec01");
    Mirf.send(data);
    //while死循环等待发送完毕,才能进行下一步操作。
    while(Mirf.isSending()) {}
    Serial.println(adata);
    Serial.print("*****");
    Serial.println(bdata,DEC);
    delay(3000);
}

接收端程序:

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

    //定义一个变量adata存储最终结果,oldadata存储旧结果,防止相同结果刷屏。
    unsigned int adata = 0, bdata = 0;

void setup()
{
    Serial.begin(9600);

    //---------初始化部分,不可随时修改---------
    Mirf.cePin = 8;   //设置CE引脚为D9
    Mirf.csnPin = 7;   //设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();//初始化nRF24L01

    //---------配置部分,可以随时修改---------
    //设置接收标识符"Rev01"
    Mirf.setRADDR((byte *)"Rec01");
    //设置一次收发的字节数,这里发一个整数,
    //写sizeof(unsigned int),实际等于2字节
    Mirf.payload = sizeof(unsigned int);//在这把2 修改成4
    //发送通道,可以填0~128,收发必须一致。
    Mirf.channel = 3;
    Mirf.config();

    //注意一个Arduino写Sender.ino,另一个写Receiver.ino。
    //这里用来辨别写入了Receiver.ino程序
    Serial.println("I'm Receiver...");
}

void loop()
{
    //定义一个暂存数组,大小为Mirf.payload。
    byte data;
    if(Mirf.dataReady())    //等待接收数据准备好
    {
      Mirf.getData(data);    //接收数据到data数组
      //data<左移8位与data并,重组数据。
      adata = (unsigned int)((data << 8) | data);
      bdata = (unsigned int)((data << 8) | data);
   
      
            
          Serial.println(adata);
    Serial.print("*****");
    Serial.println(bdata,DEC);
    }
}

maxllg 发表于 2015-12-15 15:10:41

三公分阳光 发表于 2015-8-12 00:39 static/image/common/back.gif
楼主你好,我想请教下,如果一次发送多个传感器的数据该怎么改呢?我试着改了一下你的程序,但是只能接收到 ...

data[]数组的长度是2,所以data, data无效

ww771880298 发表于 2016-3-4 01:49:17

本帖最后由 ww771880298 于 2019-6-23 15:18 编辑

我。。弄一天了!

thomasdong 发表于 2016-3-6 08:49:40

好东西,正在学习这个当中

jin1992 发表于 2016-3-9 20:43:46

请问楼主,我想用你的这个程序来传输一下A0端的肌电信号(波形信号,不规律),请问应该怎样改动程序??

jin1992 发表于 2016-3-10 11:13:17

您好,我要用您这个程序做一个肌电信号的无线传输,把采集处理后的肌电信号输入arduino的A0端,通过两个nrf24L01来实现无线传输,请问应该怎么改动下您的程序

xlz5186 发表于 2016-3-29 23:29:12

学习了。。。

leehui1206 发表于 2016-4-3 14:41:46

首先感谢大神的教程,有一个问题像请教一下,就是我根据教程,把两端的代码改成对舵机的控制了,so问题来了,控制一个舵机可以,但是我如果像让他控制两个或者更多的舵机,收发代码该如何改呢,或者说思路是什么。我试了让发送端发送Sen01、Sen02这样,没有效果。求指教!

我了瓦力 发表于 2016-4-22 16:43:09

arduino新手,可以讲一下两张原理图的具体原理么?:)谢谢

蒙奇 发表于 2016-4-24 21:51:23

请问一下,我按照你的例程,有时候我下载程序后可以相互连接,但是我拔掉电源后再试下有没有连接时就连接不上了,请问是什么问题

kuing 发表于 2016-4-25 12:40:10

楼主好   我参照你的代码使用 两块 nrf24l01+ 台产的还有两块arduino uno 板子分别连接在pc机的不同usb 口   前几次发送可以收到数据   但是很不稳定

到后来 发送端就卡住了发出去的报文   接收端接收不到   不知道什么原因 而且我在发送端 delay(3000) 我想我等待数据彻底发送完 的时间够长了吧

bbwx 发表于 2016-5-10 10:19:17

穿墙效果怎样??

linkgeek 发表于 2016-6-14 10:54:44

实验有成功的吗?我试了N种方法也没有发现啥可以解决的方案。加了滤波电容和没加是一个效果。

apple168 发表于 2016-6-21 21:16:50

有大神可以帮个忙吗?如何设置nRF24L01到其他连接引脚?我用L293D板引脚都冲突呀!
例如:
CSN -> A0
CE -> A1
MOSI -> A2
MISO -> A3
SCK -> A4

lslcxlsl 发表于 2016-6-26 07:08:57

不错,学习了!:D
页: 1 2 [3] 4 5 6
查看完整版本: Arduino学习笔记A16 - Arduino连接nRF24L01无线收发模块