Pages: [1]   Go Down
Author Topic: nRF24L01 with MIRF Libary often Timeouts  (Read 1030 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,

I am new in Wifiprogramming. I have an issue that I cannot unterstand. I have to Unos with a connected nRF24L01, using the MIRF Libary.

My Problem is that the connection is working and the Server Shows a connection result, but it works usally only 5 to 15 times and then the connection is impossible. If I restart the server all fine up to the disconnection. The Client has no effect if I restart them.

Here is my code:

Server:
Code:
/**
 * An Mirf example which copies back the data it recives.
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup(){
  Serial.begin(9600);
 
  /*
   * Set the SPI Driver.
   */

  Mirf.spi = &MirfHardwareSpi;
 
  /*
   * Setup pins / SPI.
   */
   
  Mirf.init();
 
  /*
   * Configure reciving address.
   */
   
  Mirf.setRADDR((byte *)"serv1");
 
  /*
   * Set the payload length to sizeof(unsigned long) the
   * return type of millis().
   *
   * NB: payload on client and server must be the same.
   */
   
  Mirf.payload = sizeof(unsigned long);
 
  /*
   * Write channel and payload config then power up reciver.
   */
   
  Mirf.config();
 
  Serial.println("Listening...");
}
int i = 0;
void loop(){
  /*
   * A buffer to store the data.
   */
   
  byte data[Mirf.payload];
 
  /*
   * If a packet has been recived.
   *
   * isSending also restores listening mode when it
   * transitions from true to false.
   */
   
  if(!Mirf.isSending() && Mirf.dataReady()){
    Serial.println("Got packet");
   
    /*
     * Get load the packet into the buffer.
     */
     
    Mirf.getData(data);
   
    /*
     * Set the send address.
     */
     
     
    Mirf.setTADDR((byte *)"clie1");
   
    /*
     * Send the data back to the client.
     */
     
    Mirf.send(data);
   
    /*
     * Wait untill sending has finished
     *
     * NB: isSending returns the chip to receving after returning true.
     */
     
    Serial.print("Reply sent: ");
    Serial.print(i);
    i++;
    Serial.println();
  } else {
    Serial.print(".");
  }
}

Here is the Client

Code:
/**
 * A Mirf example to test the latency between two Ardunio.
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 * Note: To see best case latency comment out all Serial.println
 * statements not displaying the result and load
 * 'ping_server_interupt' on the server.
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup(){
  Serial.begin(9600);
  /*
   * Setup pins / SPI.
   */
   
  /* To change CE / CSN Pins:
   *
   * Mirf.csnPin = 9;
   * Mirf.cePin = 7;
   */
  /*
  Mirf.cePin = 7;
  Mirf.csnPin = 8;
  */
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
 
  /*
   * Configure reciving address.
   */
   
  Mirf.setRADDR((byte *)"clie1");
 
  /*
   * Set the payload length to sizeof(unsigned long) the
   * return type of millis().
   *
   * NB: payload on client and server must be the same.
   */
   
  Mirf.payload = sizeof(unsigned long);
 
  /*
   * Write channel and payload config then power up reciver.
   */
   
  /*
   * To change channel:
   *
   * Mirf.channel = 10;
   *
   * NB: Make sure channel is legal in your area.
   */
   
  Mirf.config();
 
  Serial.println("Beginning ... ");
}

void loop(){
  unsigned long time = millis();
 
  Mirf.setTADDR((byte *)"serv1");
 
  Mirf.send((byte *)&time);
 
  while(Mirf.isSending()){
  }
  Serial.println("Finished sending");
  delay(10);
  while(!Mirf.dataReady()){
    //Serial.println("Waiting");
    if ( ( millis() - time ) > 1000 ) {
      Serial.println("Timeout on response from server!");
      return;
    }
  }
 
  Mirf.getData((byte *) &time);
 
  Serial.print("Ping: ");
  Serial.println((millis() - time));
 
  delay(1000);
}
Logged

Pages: [1]   Go Up
Jump to: