Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5322|回復: 13
打印 上一主題 下一主題

arduino+nrf24L01 收發問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-3-29 20:53:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大家好:我按照網路的範例程式  想要使用收發器
但不管我參照哪種方法  顯示的結果都是發不出去
我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[RH_NRF24_MAX_MESSAGE_LEN];
  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[RH_NRF24_MAX_MESSAGE_LEN];
    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");
    }
  }
}
2#
發表於 2016-3-29 21:39:24 | 只看該作者
mega 是接 50、51、52、53嗎?
3#
 樓主| 發表於 2016-3-29 22:38:53 | 只看該作者
對~  接腳部分我有再三確認
4#
 樓主| 發表於 2016-3-29 22:43:32 | 只看該作者
nrf24.init()
我不懂為啥我光最基本的通訊線問題
線路也都確定無誤
5#
 樓主| 發表於 2016-3-29 22:46:28 | 只看該作者
6#
發表於 2016-3-30 06:50:24 | 只看該作者
本帖最後由 超新手 於 2016-3-30 08:02 編輯

>>為啥總是出現nrf24.init()
這句話是什麼意思?
是指  序列監控視窗會顯示 init failed 嗎?
7#
 樓主| 發表於 2016-3-30 13:21:40 | 只看該作者
對~
8#
發表於 2016-3-30 15:17:02 | 只看該作者
要不要試看看官方推薦的
http://tmrh20.github.io/RF24/
下載
https://github.com/TMRh20/RF24/archive/master.zip
你用的那版, 有人反應和你一樣的問題
http://forum.arduino.cc/index.php?topic=269190.0
9#
 樓主| 發表於 2016-3-30 19:51:33 | 只看該作者
我使用裡面的GETTINGSTART
但傳送端一樣只出現
Now sending
failed
Failed, response timed out.

接收端則是
Failed, response timed out.


之前這我也試過了但就是無法
10#
發表於 2016-3-30 20:39:37 | 只看該作者
本帖最後由 超新手 於 2016-3-30 21:26 編輯

所以你有分別用role=1和role=0下載到各別板子嗎?
奇怪, Failed, response timed out.這個錯誤
應該是role=1才會發生的錯誤
為什麼兩個板子都顯示相同錯誤

另外, 除了 CE 和 CSN你也有接嗎?
11#
 樓主| 發表於 2016-3-31 10:18:51 | 只看該作者
都有接~  我有發現我UNO版能收跟發
但MEGA版卻只能收
12#
 樓主| 發表於 2016-3-31 10:23:26 | 只看該作者
radioNumber
但我看介紹  接收端值設定為0   傳送段值設定為1

我也有更改但就是無法  MEGA版需要更改其他設定嗎
13#
發表於 2016-3-31 12:49:21 | 只看該作者
本帖最後由 超新手 於 2016-3-31 12:50 編輯

>>我有發現我UNO版能收跟發
>>但MEGA版卻只能收
你是說, 至少已經可以一邊正常工作了嗎?
記得收發互換要去改 ROLE 值
或是直接用 序列監控視窗 按 T 或 R 去切換收發模式
那個程式可以支援動態切換收發模式

>>radioNumber
>>但我看介紹  接收端值設定為0   傳送段值設定為1
這個值不用改才對吧?
改 ROLE 就可了, 或是用軟體切

>>我也有更改但就是無法  MEGA版需要更改其他設定嗎
應該不用才對, 接腳不同而已
14#
發表於 2022-3-12 23:07:25 | 只看該作者

谢谢大大分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-21 17:40 , Processed in 0.202308 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表