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
NRF24L01+ "Ping" senden, empfangen, bestätigen
15.08.2016, 12:10 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2016 12:11 von MeisterQ.)
Beitrag #1
NRF24L01+ "Ping" senden, empfangen, bestätigen
Moin,

ich will momentan einen kleinen Ping und Pong Sketch programmieren.
Allerdings weiss ich momentan nicht, was los ist.

Sender
Code:
#include <SPI.h>
#include <RF24.h>

RF24 radio(8, 7);

static const uint64_t pipes[6] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL};

byte ClientNummer = 1; // Mögliche Werte: 1-6

int poti1Val = 1;
int poti2Val;
int beep = 3;

void setup() {
  pinMode(beep, OUTPUT);
  Serial.begin(9600);
  radio.begin();
  delay(20);
  radio.setChannel(1);                // Funkkanal - Mögliche Werte: 0 - 127
  radio.setAutoAck(0);
  radio.setRetries(15, 15);
  radio.setPALevel(RF24_PA_HIGH);     // Sendestärke darf die gesetzlichen Vorgaben des jeweiligen Landes nicht überschreiten!
  // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, and RF24_PA_HIGH=0dBm

  radio.openWritingPipe(pipes[ClientNummer - 1]);
  radio.openReadingPipe(1, pipes[0]);

  radio.startListening();
  delay(20);
}


void loop()
{
  transmit();
  recieve();
}

void transmit()
{
  long message[8] = {int(poti1Val)};
  radio.stopListening();
  radio.write(&message, sizeof(message));
  Serial.println("Sent");
  Serial.println(poti1Val);
  radio.startListening();

}

void recieve()
{
  if (radio.available()) {
    long got_message[8] = {0, 0, 0, 0, 0, 0, 0, 0};

    bool done = false;
    while (!done) {
      done = radio.read(&got_message, sizeof(got_message));
    }
    poti2Val = got_message[0];
    if (poti2Val == 1)
    {
      digitalWrite(beep, HIGH);
      delay(100);
      digitalWrite(beep, LOW);
      Serial.print("Recieved: ");
      Serial.println(poti2Val);
      poti2Val = 0;
    }
  }
}

Empfänger
Code:
#include <SPI.h>
#include <RF24.h>

RF24 radio(8, 7);

static const uint64_t pipes[6] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL};

uint8_t ClientNummer;
int poti1Val;
int poti2Val = 1;

void setup() {
  radio.begin();
  delay(20);
  radio.setChannel(1);                // Funkkanal - Mögliche Werte: 0 - 127
  radio.setAutoAck(0);
  radio.setPALevel(RF24_PA_HIGH);     // Sendestärke darf die gesetzlichen Vorgaben des jeweiligen Landes nicht überschreiten!
  // RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, and RF24_PA_HIGH=0dBm

  radio.openReadingPipe(0, pipes[0]);
  radio.openReadingPipe(1, pipes[1]);
  radio.openReadingPipe(2, pipes[2]);
  radio.openReadingPipe(3, pipes[3]);
  radio.openReadingPipe(4, pipes[4]);
  radio.openReadingPipe(5, pipes[5]);
  radio.startListening();
  delay(20);
  Serial.begin(9600);
}


void loop()
{
  recieve();
}

void recieve()
{
  if (radio.available()) {
    long got_message[8] = {0, 0, 0, 0, 0, 0, 0, 0};

    bool done = false;
    while (!done) {
      done = radio.read(&got_message, sizeof(got_message));
    }
    poti1Val = got_message[0];
    Serial.println("Recieved");
    Serial.println(poti1Val);
    if (poti1Val == 1)
    {
      transmit();
    }
  }
}

void transmit()
{
  long message[8] = {int(poti2Val)};
  radio.stopListening();
  radio.write(&message, sizeof(message));
  Serial.println("Sent beep");
  Serial.println(poti2Val);
  delay(2000);
  radio.startListening();
}

Also der Sender sendet in einer Variable eine 1, der Empfänger empfängt diese, setzt sie wieder auf 0, sendet darauf eine zweite Variable mit 1 an den Sender zurück, der Sender empfängt sie, und bestätigt dieses mit einem beep über einen Speaker.

Ich hab den Code genau so vorhin kurz laufen gehabt, da hat es wunderbar funktioniert. Dann habe ich nur ein else{} auf das " if (radio.available()) {" geschrieben, dann hat nichts mehr funktioniert.

Nachdem ich das else wieder entfernt hab, was sollte schon sein? Es ging garnicht mehr...

Der Sender sendet die Variable weiterhin, der Empfänger empfängt sie, sendet seine auch wieder zurück... aber der Sender empängt die bestätigung nicht mehr. Huh

Kann da jemand evtl helfen?Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.08.2016, 21:14
Beitrag #2
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Hat niemand ne idee?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.08.2016, 22:53
Beitrag #3
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Hallo MeisterQ,

ich habe auch NRF24L01+ Module im Einsatz und weiß dass die manchmal recht zickig sein können. Confused

Ich habe jetzt keine Lust zwei Arduinos mit den Funkmodulen zu bestücken um deinen Code zu testen.
Aber ein paar Tipps aus der Zeit als ich mit den Teilen intensiver befasst hatte kann ich noch geben.
Die 3,3V Versorgung muss stabil sein, der 3,3V Regler von einem Arduino reicht da u.U. nicht aus. Ich habe LF33CV dafür verwendet. Auch ein zusätzlicher 22µF Elko direkt an den Spannungsversorgungspins des NRF-Moduls kann nicht schaden.
Ich habe die Übertragungsgeschwindigkeit herab gesetzt.
Code:
radio.setDataRate(RF24_250KBPS);
dann habe ich
Code:
radio.setRetries(15, 0);
eingestellt
in deinem Empfänger Code steht
Code:
...
  delay(2000);
  radio.startListening();
in diesen 2 Sek. Wartezeit kann der natürlich nichts empfangen wenn was reinkommt.

Vielleicht hilft davon was.

Noch was.
Es gibt die Funktion
Code:
radio.printDetails();
Damit lasse ich mir im setup() nach der Initialisierung des NRF-Moduls die Parametrierung zum SerialMonitor ausgeben. Manchmal kommt es bei mir nämlich vor, dass ein NRF-Modul die Einstellungen aus der Setuproutine nicht beim ersten Versuch annimmt. Dann muss ich nochmal den Reset-Knopf am Arduino drücken.

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
17.08.2016, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2016 12:57 von MeisterQ.)
Beitrag #4
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Hey, danke für die Antwort.

Allerdings haben keine der Tipps geholfen :|

den delay hatte ich während ich den Thread eröffnet hab, und nebenbei gebastelt hab, schon rausgenommen, ging dennoch nicht.

radio.prtinDetails(); funktioniert auch garnicht, oder hab ich die falsche baud eingestellt?

Ich glaube das hat irgendwas mit den pipes zu tun.. aber da steige ich noch nicht so durch..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.08.2016, 13:46
Beitrag #5
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Hallo,

leg in der IDE mal einen neuen Tab mit Namen "printf.h" an.
dort kopierst du dann
Code:
/*
Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
*/

/**
* @file printf.h
*
* Setup necessary to direct stdout to the Arduino Serial library, which
* enables 'printf'
*/

#ifndef __PRINTF_H__
#define __PRINTF_H__

#ifdef ARDUINO

int serial_putc( char c, FILE * )
{
  Serial.write( c );

  return c;
}

void printf_begin(void)
{
  fdevopen( &serial_putc, 0 );
}

#else
#error This example is only for use on Arduino.
#endif // ARDUINO

#endif // __PRINTF_H__
hinein

In den Sender- und Empfängersketch fügst du dann jeweils ein
Code:
#include "printf.h"
ein
Dann sollte es auch mit "radio.printDetails(); klappen.

Der Empfänger weiß nicht worüber er senden soll.
Ergänze im Sender mal noch ein
Code:
radio.openReadingPipe(1, pipes[1]);
und im Sender ein
Code:
radio.openWritingPipe(pipes[1]);

Viel Glück
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
17.08.2016, 16:14
Beitrag #6
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Funkioniert leider nicht..

Der Sender sagt weiterhin, dass er Sendet, der Empfänger sagt, bekommen, sagt ebenso "beep" gesendet, aber beim Sender kommt keine Antwort vom Empfänger an.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.08.2016, 12:48
Beitrag #7
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Mehr kann ich jetzt leider auch nicht mehr dazu beitragen ohne einen Versuchsaufbau zu machen.
Was mich wundert ist dass es mal funktioniert hatte.

Läuft den jetzt das "radio.printDetails();" bei beiden Teilnehmern ??

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
19.08.2016, 12:16
Beitrag #8
RE: NRF24L01+ "Ping" senden, empfangen, bestätigen
Kann ich dir leider nicht sagen, bevor ich damals das else eingefügt hab, hat der Sender das Signal gesendet, der Empfänger hat geantwortet, und der Sender hat dann gepiept. Um sicher zu gehen, dass es sich nicht um den alten Sketch handelt, habe ich einen anderen Arduino genommen, und auch zum Testen die Stromversorgung der Arduinos getrennt. Ich hatte vorher einen einseitigen Sender, der nur ein Ping ausgesendet hat, und der andere hats empfangen und gepiept.

Ich hab das radio.printDetails() eingefügt, hab die printf.h eingefügt, wie sie auch bei den Beispielsketchen angehängt ist, aber hab trotzdem keine ausgabe bekommen.
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 90 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 509 02.11.2016 15:50
Letzter Beitrag: MeisterQ
  NRF24L01,Empfangene Daten auswerten Marc2014 9 515 30.07.2016 19:34
Letzter Beitrag: rkuehle
  Problem mit ESP8266 und EMail senden torsten_156 1 593 13.06.2016 21:14
Letzter Beitrag: torsten_156
  Serielle Schnittstelle - Daten empfangen Datatom 8 772 22.05.2016 18:10
Letzter Beitrag: avoid
  Sensordaten per I2C senden ElAleMaNo 2 684 30.03.2016 23:44
Letzter Beitrag: ElAleMaNo
  Daten per Ethernet Shield 2 senden Mark79 3 859 22.03.2016 19:29
Letzter Beitrag: Mark79

Gehe zu:


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