菜鸟玩 NRF24L01
蓝牙成本高、wifi不会玩,就先看看NRF24L01吧来自贴吧的教程:
http://tieba.baidu.com/p/3092150056
IRQ –悬空 @@@@ MISO – D12,
MOSI – D11 @@@ SCK – D13,
CSN – D7, @@@@ CS – D8,
VCC - 3.3V @@@@ GND - GND
发送代码: 00000——00999 循环
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
char tempx="00000";
int x=0;
void setup(){
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"clie1"); // 标记本地名,用于接收
Mirf.payload = 5; //对话的长度,用于约定双方对话的缓冲窗口大小,这个代表5个字节
Mirf.channel = 3; // 信道,测试了一下,不同的信道也能接收但即时性很差,不知是不是存在自动寻道匹配机制
Mirf.config();
}
void loop(){
unsigned long time = millis();
Mirf.setTADDR((byte *)"serv1"); // 标记对方的地址
//Sends("hello"); //发送了一个5字节的hello
if(x<10)tempx=x+48;
else if(x>9 && x<100){
tempx=x%10+48;
tempx=x/10+48;
}else if(x>99 && x<999){
tempx=x%10+48;
tempx=(x/10)%10+48;
tempx=x/100+48;
}
Sends(tempx);
x++;
if(x==1000){
x=0;
for(int col=0;col<5;col++)tempx=48;
}
delay(100);
}
void Sends(char *str)
{
int lens;
lens=strlen(str);
char msg;
int i;
for (i=0;i<lens;i++)
{
msg= int(str);
}
Mirf.send((byte *)&msg);
while(Mirf.isSending()){}
}
接收代码
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup(){
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"serv1"); // 本地名
Mirf.payload = 5; // 长度
Mirf.channel = 3; // 信道
Mirf.config();
}
void loop(){
byte data;
if(!Mirf.isSending() && Mirf.dataReady()){ //存在数据
Mirf.getData(data);
int i;
String Temp;
for (i = 0; i < Mirf.payload; i++) //把收到的信息拼起来,到一个串里面
{
Temp += char(data);
}
Serial.print("Get:");
Serial.print(Mirf.payload);
Serial.print(" ");
Serial.println(Temp);
/**
Mirf.setTADDR((byte *)"clie1");
Mirf.send(data);
**/
}
}
这也是一个数据传输的解决方案? 经测试可以的!:P 本帖最后由 hi55234 于 2015-2-24 11:55 编辑
dReamX 发表于 2015-2-23 20:49 static/image/common/back.gif
这也是一个数据传输的解决方案?
5字节,串口转NRF24L01,要想一次性发送更多,就增加 tempx、Mirf.payload的长度就可以了
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
char tempx;
int jsq1=0;
boolean NRF=0;
void setup(){
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"clie1"); // 标记本地名,用于接收
Mirf.payload = 5; //对话的长度,用于约定双方对话的缓冲窗口大小,这个代表5个字节
Mirf.channel = 3; // 信道,测试了一下,不同的信道也能接收但即时性很差,不知是不是存在自动寻道匹配机制
Mirf.config();
}
void loop(){
Mirf.setTADDR((byte *)"serv1"); // 标记对方的地址
//Sends("hello"); //发送了一个5字节的hello
while (Serial.available() > 0) {
NRF=1;
if(jsq1<5){ //只接受前5个字节
tempx=Serial.read();
jsq1++;
}else Serial.read(); //超过5字节的都丢弃
delayMicroseconds(1200);
}
if(NRF){
NRF=0; //nrf发送数据次数与串口接收数据次数一对一
for(int col=jsq1;col<5;col++)tempx=32; //不足5字节的补上空格,算是一种视觉上的清空
jsq1=0;
Sends(tempx);
//for(int col=0;col<5;col++)tempx=0;//不需要清空,因为新的填充会自然清空
}
}
void Sends(char *str)
{
int lens;
lens=strlen(str);
char msg;
int i;
for (i=0;i<lens;i++)
{
msg= int(str);
}
Mirf.send((byte *)&msg);
while(Mirf.isSending()){}
}
最近也在玩nrf24l01,但是好多不明白的 收藏:D:D:D:D:D 跟着楼主既长知识又长学问.... 我用的就是这个库 怎么控制六路继电器?
页:
[1]