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