极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12061|回复: 2

NRF2401延遲問題~請教各位版主跟各位大神

[复制链接]
发表于 2014-4-9 16:32:19 | 显示全部楼层 |阅读模式
看各位大神玩NRF2401挺好玩的,所以就敗了一組回來玩玩看,我用RF24的範例做兩個NRF2401的傳輸,但是有發現一個問題,在正常傳輸下,按下主機的RESET後,從機可以很快的連上,但是按下從機的RESET後,卻要花上7~9秒才會處理主機發來的信號,我有嘗試過將IRQ的引腳拉低,也做過延遲時間,狠了狠心也試過兩個對調,但是好像沒什麼作用,請教各位大神有辦法讓這個情況改善嗎?我該從哪個地方去著手,也看過有人說要將FIFO清空,也順便請教各問論壇的大神們,怎麼做最基本的清空動作?

特別貼上影片,我的板子~~
http://v.youku.com/v_show/id_XNjk2NDk5MDUy.html


也試過這個外國人的作法,也如法炮製的修修改改....結果~~跟沒改過的狀況一樣

http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo




ORZ 在Arduino前一個禮拜的新手......


使用器材
arduino UNR R3*2
NRF2401 *2

使用庫
RF24
RF24Network


因為改完後跟原版一樣...所以貼上原稿
(自己修修改改的程式碼,改得比阿拉伯文還要看不懂.....索性貼上原稿 )

//////////////////////////////////////主機-發送信號/////////////////////////////////////
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

// nRF24L01(+) radio attached using Getting Started board
RF24 radio(9,10);
// Network uses that radio
RF24Network network(radio);
// Address of our node
const uint16_t this_node = 1;
// Address of the other node
const uint16_t other_node = 0;
// How often to send 'hello world to the other unit
const unsigned long interval = 150; //ms
// When did we last send?
unsigned long last_sent;
// How many have we sent already
//unsigned long packets_sent;

// Structure of our payload
struct payload_t
{
  uint32_t ms;
  uint32_t sensorDataA;
  uint32_t sensorDataB;
};

boolean power_SW;
int led_VOL;

void setup(void)
{
  Serial.begin(115200);
  Serial.println("RF24Network/examples/helloworld_tx/");

  SPI.begin();
  radio.begin();
  radio.setDataRate( RF24_250KBPS ) ;
  network.begin(/*channel*/ 50, /*node address*/ this_node);
  randomSeed(analogRead(0));
  pinMode(7,INPUT_PULLUP);
}

void loop(void)
{
  power_SW=!digitalRead(7);
  led_VOL=analogRead(A0)/4;

  // Pump the network regularly
  network.update();
  // If it's time to send a message, send it!
  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    last_sent = now;

    Serial.print("power_SW:");
    Serial.println(power_SW);
    Serial.print("led_VOL:");
    Serial.println(led_VOL);

    Serial.print("Sending...");
    payload_t payload = {
      millis(),power_SW,led_VOL    };
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,&payload,sizeof(payload));
    if (ok)
      Serial.println("ok.");
    else
      Serial.println("failed.");
  }
}


//////////////////////////////////////從機-接收信號/////////////////////////////////////


#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

// nRF24L01(+) radio attached using Getting Started board
RF24 radio(9,10);
// Network uses that radio
RF24Network network(radio);
// Address of our node
const uint16_t this_node = 0;
// Address of the other node
const uint16_t other_node = 1;

// Structure of our payload
struct payload_t
{
  uint32_t ms;
  uint32_t sensorDataA;
  uint32_t sensorDataB;
};

#define power_PIN 5
#define led_PIN 6

boolean power_SW;
int led_VOL;


void setup(void)
{
  Serial.begin(115200);

  SPI.begin();
  radio.begin();
  radio.setDataRate( RF24_250KBPS ) ;
  network.begin(/*channel*/ 50, /*node address*/ this_node);

  pinMode(power_PIN,OUTPUT);
  pinMode(led_PIN,OUTPUT);
}

void loop(void)
{  
  // Pump the network regularly
  network.update();
  // Is there anything ready for us?
  while ( network.available() )
  {
    // If so, grab it and print it out
    RF24NetworkHeader header;
    payload_t payload;
    network.read(header,&payload,sizeof(payload));
    power_SW=payload.sensorDataA;
    led_VOL=payload.sensorDataB;

    Serial.print("power_SW:");
    Serial.println(power_SW);
    Serial.print("led_VOL:");
    Serial.println(led_VOL);
  }

  digitalWrite(power_PIN,power_SW);
  analogWrite(led_PIN,led_VOL);

}

回复

使用道具 举报

发表于 2017-4-13 16:54:24 | 显示全部楼层
你的不要打繁体字好么
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 12:08 , Processed in 0.044988 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表