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
  Wie wird bitte der Pin EN am HC05 gesetzt ? comfan 3 229 26.09.2017 16:34
Letzter Beitrag: Alfrede
  ATtiny13 mit der Arduino IDE 1.0.6 programmieren - geht das? Gelegenheitsbastler 5 2.717 11.09.2017 15:24
Letzter Beitrag: Mathias
  Attiny2313 Pin auf High setzen. georg01 9 530 20.08.2017 09:20
Letzter Beitrag: hotsystems
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 1.089 13.07.2017 14:52
Letzter Beitrag: Tommy56
  eine einfache Xor Bitte ? himbeersirup 1 308 08.06.2017 09:15
Letzter Beitrag: MicroBahner
  bitte, was ist "link GND" bergfrei 2 354 21.05.2017 15:14
Letzter Beitrag: bergfrei
  Bitte um Hilfe Arduino Nano-MAX7219-PIR_Sensor Opa_Klaus 35 2.032 20.05.2017 21:11
Letzter Beitrag: Opa_Klaus
  LCD geht nicht - keine Ahnung warum?? DL1AKP 12 835 15.05.2017 13:17
Letzter Beitrag: DL1AKP
Rainbow File geht nicht zum compilieren!!!! Jocky 7 561 19.02.2017 20:01
Letzter Beitrag: Binatone
  Code aus 1.6.9 geht mit 1.8.1 nicht mehr zu kompilieren DL1AKP 7 734 02.02.2017 12:16
Letzter Beitrag: Tommy56

Gehe zu:


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