nRF24 收發模塊測試
忽然一堆人在玩nRF24L01,手癢就跟著跳進來下面代碼是參考RF24的例子改成用Mirf庫,收發端共用同一個代碼
接收端可以只接電源,發送端啟動後要在串口輸入C切換
/**
*
* Pins:
* Hardware SPI: UNO / LEONARDO
* MISO -> D12 / ICSP 1
* MOSI -> D11 / ICSP 4
* SCK -> D13 / ICSP 3
*
*/
#include <SPI.h> // required by Mirf library
#include <Mirf.h> // required by Mirf library
#include <nRF24L01.h> // required by Mirf library
#include <MirfHardwareSpiDriver.h> // required by Mirf library
byte* SERVER_ADDR = (byte*)"srv01"; // 5 bytes addr
byte* CLIENT_ADDR = (byte*)"cli01"; // 5 bytes addr
boolean clientMode = false; // start mode using serverMode
unsigned long TIMEOUT = 2000; // server response timeout for 2s
unsigned long sendTime; // time when client send data
void setup(){
Serial.begin(9600);
Mirf.cePin = 8; // default using pin 8
Mirf.csnPin = 7; // default using pin 7
Mirf.channel = 1; // default value
Mirf.payload = 5; // define data length
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
/*
* Mirf will always listen to RADDR.
* And set TADDR to the RADDR of the other end.
*/
Mirf.setRADDR(SERVER_ADDR); // 5 bytes addr
Mirf.setTADDR(CLIENT_ADDR); // 5 bytes addr
Mirf.config();
Serial.print("\r\nConfigure as server.");
Serial.println("Change to client by input 'C'.");
}
void loop(){
byte buffer = {0xFF,0x00,0x00,0x00,0xFF}; // 5 bytes data
if(Serial.available()){ // read input first
char c = toupper(Serial.read());
if(c == 'C' && !clientMode){ // set to client mode
Serial.print("Configure as client mode.");
Serial.println("Change to server by input 'S'.");
clientMode = true;
Mirf.setRADDR(CLIENT_ADDR); // 5 bytes addr
Mirf.setTADDR(SERVER_ADDR); // 5 bytes addr
}
else if(c == 'S' && clientMode){ // set to server mode
Serial.print("Configure as server mode.");
Serial.println("Change to client by input 'C'.");
clientMode = false;
Mirf.setRADDR(SERVER_ADDR); // 5 bytes addr
Mirf.setTADDR(CLIENT_ADDR); // 5 bytes addr
}
}
if(clientMode){
buffer = 0xEF; buffer = 0xFF; // client heart beat: FFEFFFxxFF
sendTime = millis();
Mirf.send(buffer);
while(Mirf.isSending()); // wait for sending
Serial.println("Send client heart beat!");
while(!Mirf.dataReady()){
if((millis() - sendTime) > TIMEOUT){
Serial.println("Server response timeout!");
return;
}
}
Mirf.getData(buffer);
if(buffer != 0xFF || buffer != 0xFF) // drop error reading
return;
if(buffer == 0xEF && buffer == 0x00){ // server heart beat: FFEF00xxFF
Serial.println("Got server heart beat!");
}
delay(1000); // send heart beat after 1s
}
else if(!Mirf.isSending() && Mirf.dataReady()){ // Server Mode and recieved
Mirf.getData(buffer);
if(buffer != 0xFF || buffer != 0xFF) // drop error reading
return;
// client heart beat: FFEFFFxxFF, server heart beat: FFEF00xxFF
if(buffer == 0xEF && buffer == 0xFF){
Serial.println("Got client heart beat!");
buffer = 0x00; // format: FFEF00xxFF
Mirf.send(buffer);
while(Mirf.isSending()); // wait for sending
Serial.println("Send server heart beat!");
}
}
}
页:
[1]