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 0 91 08.11.2016 18:49
Letzter Beitrag: Marc2014
  NRF24L01 Packet / Msg Frage Marc2014 5 122 07.11.2016 18:08
Letzter Beitrag: hotsystems
  DHT + NRF24L01 Marc2014 6 149 07.11.2016 17:22
Letzter Beitrag: Marc2014
  Homeautomation ? Welches System ? MySensors - NRF24L01 - Arduino - OpenHAB Marc2014 0 102 07.11.2016 17:13
Letzter Beitrag: Marc2014
  NRF24L01 Interrupt MeisterQ 22 512 02.11.2016 15:50
Letzter Beitrag: MeisterQ
  NRF24L01+ "Ping" senden, empfangen, bestätigen MeisterQ 8 377 23.08.2016 13:19
Letzter Beitrag: MeisterQ
  NRF24L01,Empfangene Daten auswerten Marc2014 9 516 30.07.2016 19:34
Letzter Beitrag: rkuehle
  SoftwareSerial Baudrate automatisch korrekt erkennen - geht das? Gelegenheitsbastler 5 528 21.04.2016 12:32
Letzter Beitrag: SkobyMobil
  Wo finde ich bitte die LIB USBHOST ? arduinopeter 6 498 24.03.2016 16:53
Letzter Beitrag: arduinopeter
  Stringvariable senden beim ESP8266 geht nicht , warum ? arduinofan 9 1.132 12.01.2016 11:05
Letzter Beitrag: arduinofan

Gehe zu:


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