INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ?
31.01.2016, 23:30 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2016 23:33 von arduinofan.)
Beitrag #1
Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ?
Hallo, guten Tag.
Ich möchte bitte den ersten nRF24L01 auf "T" setzen und den zweiten auf "R" ohne die serielle Eingabe, die möchte ich rausnehmen. Wie macht man das bitte ? ich bekomme das nicht hin , das beide dann ihre Funktion aufnehmen.
Es soll einer gleich mit der Arbeit "T" anfangen und der andere gleich mit "R".

Danke.

GRuss

Code:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

#define CE_PIN   53
#define CSN_PIN  48

RF24 radio(CE_PIN, CSN_PIN);

const uint64_t pipes[2] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL};
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
typedef enum { role_ping_out = 1, role_pong_back } role_e;

role_e role = role_pong_back;

void setup(void)
{
Serial.begin(9600);
printf_begin();
printf("\n\rRF24/examples/GettingStarted/\n\r");
printf("ROLE: %s\n\r",role_friendly_name[role]);
printf("*** PRESS 'T' to begin transmitting to the other node\n\r");

radio.begin();
radio.setRetries(15,15);

radio.openReadingPipe(1,pipes[1]);
radio.startListening();
radio.printDetails();
}

void loop(void)
{
  if (role == role_ping_out)
  {
    radio.stopListening();

    unsigned long time = millis();
    printf("Now sending %lu...",time);
    bool ok = radio.write( &time, sizeof(unsigned long));

    if (ok)
    {
      printf("ok...");
    }
    else
    {
      printf("failed.\n\r");
    }

    radio.startListening();

    unsigned long started_waiting_at = millis();
    bool timeout = false;
    
    while ( ! radio.available() && ! timeout )
    if (millis() - started_waiting_at > 200 )
    timeout = true;

    if ( timeout )
    {
      printf("Failed, response timed out.\n\r");
    }
    else
    {
      unsigned long got_time;
      radio.read( &got_time, sizeof(unsigned long) );

      printf("Got response %lu\n\r");
    }

    delay(1000);
    }

    if ( role == role_pong_back )
    {
      if ( radio.available() )
    {
    
    unsigned long got_time;
    bool done = false;
    while (!done)
    {
      done = radio.read( &got_time, sizeof(unsigned long) );

      printf("Got payload %lu...",got_time);
      delay(20);
    }

    radio.stopListening();
    radio.write( &got_time, sizeof(unsigned long) );
    printf("Sent response.\n\r");

    radio.startListening();
    }
  }

  if ( Serial.available() )
  {
    char c = toupper(Serial.read());
    if ( c == 'T' && role == role_pong_back )
    {
      printf("PRESS 'R' TO SWITCH BACK\n\r");

      role = role_ping_out;
      radio.openWritingPipe(pipes[0]);
      radio.openReadingPipe(1,pipes[1]);
    }
    else if ( c == 'R' && role == role_ping_out )
    {
      printf("*PRESS 'T' TO SWITCH BACK\n\r");

      role = role_pong_back;
      radio.openWritingPipe(pipes[1]);
      radio.openReadingPipe(1,pipes[0]);
     }
   }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2016, 17:25
Beitrag #2
RE: Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ?
Siehe hier :

http://www.arduinoforum.de/arduino-Threa...so-richtig

Gruss
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2016, 18:52 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2016 18:56 von ardu_arne.)
Beitrag #3
RE: Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ?
Hallo,

versuche es mal mit folgendem Code: (nicht getestet)
Code:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

#define CE_PIN   53
#define CSN_PIN  48

byte inbyte;
byte daten1[1];
byte daten2[1];

RF24 radio(CE_PIN, CSN_PIN);

const uint64_t pipes[2] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL};
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
typedef enum { role_ping_out = 1, role_pong_back } role_e;

role_e role = role_pong_back;
role_e role = role_ping_out;

void setup(void)
{

Serial.begin(9600);
delay(500);

radio.begin();
radio.setRetries(15,15);

radio.openReadingPipe(1,pipes[1]);
radio.startListening();
radio.printDetails();

  if (role == role_ping_out)
  {
    radio.openWritingPipe(pipes[0]);
    radio.openReadingPipe(1,pipes[1]);    
  }

  if ( role == role_pong_back )
  {
    radio.openWritingPipe(pipes[1]);
    radio.openReadingPipe(1,pipes[0]);  
  }

}

void loop(void)
{
  if (role == role_ping_out)
  {
    radio.stopListening();
    radio.write( daten1, sizeof(daten1));
    radio.startListening();

    unsigned long started_waiting_at = millis();
    bool timeout = false;
    
    while ( ! radio.available() && ! timeout )
    if (millis() - started_waiting_at > 200 )
    timeout = true;

    if ( timeout )
    {
      goto weiter;
    }
    else
    {
      radio.read( daten1, sizeof(daten1) );
      Serial.print("daten1 = ");
      Serial.println(daten1[0]);
      delay(10);
    }
    
    weiter:
    delay(100);
  }

  if ( role == role_pong_back )
  {
    if ( radio.available() )
    {
    
      unsigned long got_time;
      bool done = false;
      while (!done)
      {
        done = radio.read( daten2, sizeof(daten2) );
        Serial.print("daten2 = ");
        Serial.println(daten2[0]);
        delay(10);
      }

      radio.stopListening();
    
      inbyte = inbyte+1;
      daten1[0] = inbyte;
      radio.write( daten1, sizeof(daten1));
    
      radio.startListening();
    }
  }
}

Eine der Zeilen (19 oder 20):
Code:
role_e role = role_pong_back;
role_e role = role_ping_out;
muss auskommentiert werden. Je nachdem welcher Teilnehmer welche Rolle spielt.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2016, 20:10
Beitrag #4
RE: Den 1. nRF24L01 auf "T" setzen und den 2. auf "R" setzen, wie geht das bitte ?
Hallo, danke.
Das ist eine gute Idee.

Es funktioniert jetzt auch ohne ein Startbyte.

Danke.
Gruss
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  NRF24L01 Marc2014 1 209 09.01.2017 19:28
Letzter Beitrag: celle
  nRF24l01 empfängt Daten nicht techniclover 1 132 09.01.2017 19:20
Letzter Beitrag: celle
  Uhr geht ungenau trotz RTC3231 Grot 2 170 26.12.2016 13:32
Letzter Beitrag: Grot
  Sketch geht,geht nicht? malsehen 0 123 25.12.2016 21:24
Letzter Beitrag: malsehen
  Welche Library für das Funkmodul nRF24L01? alpenpower 1 140 25.12.2016 18:50
Letzter Beitrag: ardu_arne
  NRF24L01 Packet / Msg Frage Marc2014 5 173 07.11.2016 18:08
Letzter Beitrag: hotsystems
  DHT + NRF24L01 Marc2014 6 215 07.11.2016 17:22
Letzter Beitrag: Marc2014
  Homeautomation ? Welches System ? MySensors - NRF24L01 - Arduino - OpenHAB Marc2014 0 161 07.11.2016 17:13
Letzter Beitrag: Marc2014
  NRF24L01 Interrupt MeisterQ 22 680 02.11.2016 15:50
Letzter Beitrag: MeisterQ
  NRF24L01+ "Ping" senden, empfangen, bestätigen MeisterQ 8 451 23.08.2016 13:19
Letzter Beitrag: MeisterQ

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste