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

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
  Rundklammern setzen, aber wie und warum? HarryS 4 482 18.03.2018 10:25
Letzter Beitrag: HarryS
  328P geht nicht mehr [gelöst] Harry 37 2.284 04.03.2018 19:57
Letzter Beitrag: Harry
  Mehrere Ausgänge mit einem Befehl auf High oder Low setzen dahans 1 498 10.01.2018 12:48
Letzter Beitrag: Tommy56
  Bei Power ein geht der Servo auf 90 Grad ? Franz54 12 1.024 09.01.2018 20:55
Letzter Beitrag: Franz54
  Arduino mit nrf24l01 GeLaue 65 4.720 28.12.2017 17:05
Letzter Beitrag: ardu_arne
  I2C Slave Empfang geht aber Senden? Franz54 9 969 09.11.2017 22:05
Letzter Beitrag: Tommy56
  Wie wird bitte der Pin EN am HC05 gesetzt ? comfan 3 424 26.09.2017 16:34
Letzter Beitrag: Alfrede
  ATtiny13 mit der Arduino IDE 1.0.6 programmieren - geht das? Gelegenheitsbastler 5 3.483 11.09.2017 15:24
Letzter Beitrag: Mathias
  Attiny2313 Pin auf High setzen. georg01 9 1.018 20.08.2017 09:20
Letzter Beitrag: hotsystems
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 1.900 13.07.2017 14:52
Letzter Beitrag: Tommy56

Gehe zu:


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