2.VCC <-> 3.3V
1.GND <-> GND
3.CE <-> D9
4.CSN <-> D10
6.MOSI <-> D11
7.MISO <-> D12
5.SCK <-> D13
8.IRQ <-> 不接
/*
http://www.geek-workshop.com/thread-13254-1-1.html
nRF24L01 Arduino發送端
Ansifa
2015/3/7
引脚接法:
nRF24L01 Arduino UNO
2.VCC <-> 3.3V
1.GND <-> GND
3.CE <-> D9
4.CSN <-> D10
6.MOSI <-> D11
7.MISO <-> D12
5.SCK <-> D13
8.IRQ <-> 不接
*/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup(){
Serial.begin(9600);
Mirf.cePin = 9; //設置CE引脚為D9
Mirf.csnPin = 10; //設置CE引脚為D10
Mirf.spi = &MirfHardwareSpi;
Mirf.init(); //初始化nRF24L01
//設置接收標識符"Sen01"
Mirf.setRADDR((byte *)"Sen01");
//設置一次收發的字節數,這裏發一個整數,寫sizeof(unsigned int),實際等於2字節
Mirf.payload = sizeof(unsigned int);
//發送通道,可以填0~128,收發必須一致。
Mirf.channel = 3;
Mirf.config();
//注意一個Arduino寫Sender.ino,另一個寫Receiver.ino。
//這裏標識寫入了Sender.ino
Serial.println("I'm Sender...");
}
unsigned int adata = 0;
void loop(){
//讀取A0值到adata
//adata = analogRead(A0);
adata++;
if(adata>1023)
adata=0;
//由於nRF24L01只能以byte單字節數組形式發送Mirf.payload個數據,
//所以必須將所有需要傳輸的數據拆成byte。
//下面定義byte數組,存放待發數據,因為Mirf.payload = sizeof(unsigned int);
//實際下面等於byte data[2];
byte data[Mirf.payload];
//adata是unsigned int雙字節數據,必須拆開。
//將adata高低八位拆分:
data[0] = adata & 0xFF; //低八位給data[0],
data[1] = adata >> 8; //高八位給data[1]。
//設置向"serv1"發送數據
Mirf.setTADDR((byte *)"Rec01");
Mirf.send(data);
//while死循環等待發送完畢,才能進行下一步操作。
while(Mirf.isSending()) {}
delay(20);
}
/*
http://www.geek-workshop.com/thread-13254-1-1.html
nRF24L01 Arduino Receiver接收端
Ansifa
2015/3/7
引脚接法:
nRF24L01 Arduino UNO
2.VCC <-> 3.3V
1.GND <-> GND
3.CE <-> D9
4.CSN <-> D10
6.MOSI <-> D11
7.MISO <-> D12
5.SCK <-> D13
8.IRQ <-> 不接
*/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
//定義一個變量adata存儲最終結果,oldadata存儲舊結果,防止相同結果刷屏。
unsigned int adata = 0, oldadata = 0;
void setup(){
Serial.begin(9600);
//---------初始化部分,不可隨時修改---------
Mirf.cePin = 9; //設置CE引脚為D9
Mirf.csnPin = 10; //設置CE引脚為D10
Mirf.spi = &MirfHardwareSpi;
Mirf.init(); //初始化nRF24L01
//---------配置部分,可以隨時修改---------
//設置接收標識符"Rev01"
Mirf.setRADDR((byte *)"Rec01");
//設置一次收發的字節數,這裏發一個整數,
//寫sizeof(unsigned int),實際等於2字節
Mirf.payload = sizeof(unsigned int);
//發送通道,可以填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[Mirf.payload];
if(Mirf.dataReady()){ //等待接收數據準備好
Mirf.getData(data); //接收數據到data數組
//data[1]<左移8位與data[0]合併,重組數據。
adata = (unsigned int)((data[1] << 8) | data[0]);
//與上一次結果比較,避免相同結果刷屏,降低串口流量
if(adata != oldadata){
oldadata = adata; //本次結果作為歷史結果。
//Serial.print輸出數據
Serial.print("A0=");
Serial.println(adata);
//也可以輸出雙字節數據
//Serial.write(data[1]);
//Serial.write(data[0]);
}
}
}