發射端
搖桿: A0, A1
nf2401: 2.VCC <-> 3.3V
1.GND <-> GND
3.CE <-> D9
4.CSN <-> D10
6.MOSI <-> D11
7.MISO <-> D12
5.SCK <-> D13
8.IRQ <-> 不接
接收端
nf2401: 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>
unsigned int adata = 0;
unsigned int bdata = 0;
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[2]);
//發送通道,可以填0~128,收發必須一致。
Mirf.channel = 3;
Mirf.config();
//注意一個Arduino寫Sender.ino,另一個寫Receiver.ino。
//這裏標識寫入了Sender.ino
Serial.println("I'm Sender...");
}
void loop() {
adata = analogRead(A0);
// this small pause is needed between reading
// analog pins, otherwise we get the same value twice
delay(100);
bdata = analogRead(A1);
byte data[Mirf.payload];
//adata是unsigned int雙字節數據,必須拆開。
//將adata高低八位拆分:
data[0] = adata & 0xFF;//低八位給data[0],
data[1] = adata >> 8;//高八位給data[1]。
data[2] = bdata & 0xFF;//低八位給data[0],
data[3] = bdata >> 8;//高八位給data[1]。
//設置向"serv1"發送數據
Mirf.setTADDR((byte *)"Rec01");
Mirf.send(data);
//while死循環等待發送完畢,才能進行下一步操作。
while(Mirf.isSending()) {}
delay(20);
}
接收端
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
//定義一個變量adata存儲最終結果,oldadata存儲舊結果,防止相同結果刷屏。
unsigned int adata = 0, bdata = 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]),實際等於4字節
Mirf.payload = sizeof(unsigned int[2]);
//發送通道,可以填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]);
bdata = (unsigned int)((data[3] << 8) | data[2]);
//Serial.print輸出數據
Serial.print("X=");
Serial.print(adata);
Serial.print(", Y=");
Serial.println(bdata);
//也可以輸出雙字節數據
//Serial.write(data[1]);
//Serial.write(data[0]);
}
}