Go Down

Topic: Gruppenkommunikation über Funk: NRF24L01  (Read 68 times) previous topic - next topic

josaki

Hallo  :) ,

ich versuche 4 Arduinos über das Funkmodul NRF24L01 kommunizieren zu lassen.

Jedes Board ist mit einem Taster und einer LED ausgestattet. Durch Drücken des Tasters eines Boards soll das Funkmodul vom Receive in den Transmitmodus wechseln und die LEDs der anderen Boards zum leuchten bringen.

Da andere Codes, die ich geschrieben hab problemlos funktionieren, weiß ich, dass LEDs, Taster und Funkmodul richtig angeschlossen sind.

Der Code den ich verwende sieht so aus:



Code: [Select]
#include  <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9, 10);
const uint64_t pipe1 = 0xE8E8F0F0E1LL;
const uint64_t pipe2 = 0xF0F0F0F0AA;
const uint64_t pipe3 = 0xF0F0F0F066;
const uint64_t pipe4 = 0xF0F0F0F0F0;
int SW1 = 7;
int LED1 = 3;
int interruptPin = 0;
int radionumber = 1;


void leuchten() {
  if (radio.available()) {
    radio.read(msg, 1);
    digitalWrite(LED1, HIGH);
  }

  if (!radio.available()) {
    digitalWrite(LED1, LOW);
    msg[0] = 0;
  }

}


void setup(void) {
  attachInterrupt(interruptPin, leuchten, FALLING);
  Serial.begin(115200);
  radio.begin();
  //radio.openWritingPipe(pipe);
  //radio.openReadingPipe(1, pipe);
  pinMode(LED1, OUTPUT);

  if (radionumber == 1) {
    radio.openWritingPipe(pipe1);
    radio.openReadingPipe(1, pipe2);
    radio.openReadingPipe(2, pipe3);
    radio.openReadingPipe(3, pipe4);
  }

  if (radionumber == 2) {
    radio.openWritingPipe(pipe2);
    radio.openReadingPipe(1, pipe1);
    radio.openReadingPipe(2, pipe3);
    radio.openReadingPipe(3, pipe4);
  }

  if (radionumber == 3) {
    radio.openWritingPipe(pipe3);
    radio.openReadingPipe(1, pipe1);
    radio.openReadingPipe(2, pipe2);
    radio.openReadingPipe(3, pipe4);
  }

  if (radionumber == 4) {
    radio.openWritingPipe(pipe4);
    radio.openReadingPipe(1, pipe1);
    radio.openReadingPipe(2, pipe2);
    radio.openReadingPipe(3, pipe3);
  }

}


void loop(void) {
  if (digitalRead(SW1) == HIGH) {
    radio.stopListening();
    Serial.println("senden");
    msg[0] = 1;
    radio.write(msg, 1);
  }

  else {
    radio.startListening();
    Serial.println("empfangen");
    Serial.println(msg[0]);

  }
}




Die Variable radionumber passe ich natürlich für jedes Board einzeln an.

Der Monitor gibt "empfangen" und "0" aus. Drücke ich den Taster erscheint einige male "senden" und dann passiert nichts mehr. Es scheint als bräche der Code ab. Keine LED leuchtet.

Kann mir jemand sagen wo mein Fehler liegt?

Go Up