arduino+nrf24L01 收發問題
大家好:我按照網路的範例程式想要使用收發器但不管我參照哪種方法顯示的結果都是發不出去
我CLIENT是使用MEGA版SERVER端是UNO版
想請問到底哪邊出問題為啥總是出現nrf24.init()
在這裡面我挑選一個我最能理解的程式碼CLIENT端如下:
#include <SPI.h>
#include <RH_NRF24.h>
// Singleton instance of the radio driver
RH_NRF24 nrf24;
// RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf
// RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin
// RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini
void setup()
{
Serial.begin(9600);
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");
}
void loop()
{
Serial.println("Sending to nrf24_server");
// Send a message to nrf24_server
uint8_t data[] = "Hello World!";
nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
// Now wait for a reply
uint8_t buf;
uint8_t len = sizeof(buf);
if (nrf24.waitAvailableTimeout(500))
{
// Should be a reply message for us now
if (nrf24.recv(buf, &len))
{
Serial.print("got reply: ");
Serial.println((char*)buf);
}
else
{
Serial.println("recv failed");
}
}
else
{
Serial.println("No reply, is nrf24_server running?");
}
delay(400);
}
SERVER端如下:
#include <SPI.h>
#include <RH_NRF24.h>
// Singleton instance of the radio driver
RH_NRF24 nrf24;
// RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf
// RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin
// RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini
void setup()
{
Serial.begin(9600);
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");
}
void loop()
{
if (nrf24.available())
{
// Should be a message for us now
uint8_t buf;
uint8_t len = sizeof(buf);
if (nrf24.recv(buf, &len))
{
// NRF24::printBuffer("request: ", buf, len);
Serial.print("got request: ");
Serial.println((char*)buf);
// Send a reply
uint8_t data[] = "And hello back to you";
nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
Serial.println("Sent a reply");
}
else
{
Serial.println("recv failed");
}
}
} mega 是接 50、51、52、53嗎? 對~接腳部分我有再三確認 nrf24.init()
我不懂為啥我光最基本的通訊線問題
線路也都確定無誤 http://randomnerdtutorials.com/nrf24l01-2-4ghz-rf-transceiver-module-with-arduino/
這是我參考的網站~ 本帖最後由 超新手 於 2016-3-30 08:02 編輯
>>為啥總是出現nrf24.init()
這句話是什麼意思?
是指序列監控視窗會顯示 init failed 嗎? 對~ 要不要試看看官方推薦的
http://tmrh20.github.io/RF24/
下載
https://github.com/TMRh20/RF24/archive/master.zip
你用的那版, 有人反應和你一樣的問題
http://forum.arduino.cc/index.php?topic=269190.0 我使用裡面的GETTINGSTART
但傳送端一樣只出現
Now sending
failed
Failed, response timed out.
接收端則是
Failed, response timed out.
之前這我也試過了但就是無法 本帖最後由 超新手 於 2016-3-30 21:26 編輯
所以你有分別用role=1和role=0下載到各別板子嗎?
奇怪, Failed, response timed out.這個錯誤
應該是role=1才會發生的錯誤
為什麼兩個板子都顯示相同錯誤
另外, 除了 CE 和 CSN你也有接嗎? 都有接~我有發現我UNO版能收跟發
但MEGA版卻只能收 radioNumber
但我看介紹接收端值設定為0 傳送段值設定為1
我也有更改但就是無法MEGA版需要更改其他設定嗎 本帖最後由 超新手 於 2016-3-31 12:50 編輯
>>我有發現我UNO版能收跟發
>>但MEGA版卻只能收
你是說, 至少已經可以一邊正常工作了嗎?
記得收發互換要去改 ROLE 值
或是直接用 序列監控視窗 按 T 或 R 去切換收發模式
那個程式可以支援動態切換收發模式
>>radioNumber
>>但我看介紹接收端值設定為0 傳送段值設定為1
這個值不用改才對吧?
改 ROLE 就可了, 或是用軟體切
>>我也有更改但就是無法MEGA版需要更改其他設定嗎
應該不用才對, 接腳不同而已
谢谢大大分享
頁:
[1]