nrf24 überträgt schon richtige Daten nur versetzt

Ich habe ein nrf24l01 Modul mit einen Arduino Mega und einen Nano gekoppelt. Ich habe das Problem, dass es mir immer die Daten verwechselt wie z.B.: der Button nimmt den Wert 496 an, was er gar nicht kann weil es ein boolean wert ist.

Wenn wer eine Idee oder einen Programm Fehler findet bitte melden.

Transmitter

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define Joyx 0
#define Joyy 1
#define Button01 4
#define Button02 5
#define Button03 6

boolean Button1 = 0;  //Der Datentyp Boolean kennt nur zwei mögliche Werte. Die zwei zulässigen Booleschen Werte sind true (wahr) und false (falsch).
boolean Button2 = 0;
boolean Button3 = 0;

int xAchse;
int yAchse;  

RF24 radio(7, 8); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instanz um das Modul zu starten

const byte address[6] = "50001";  //Adresse, auf dem die Empfangsdaten gesendet werden sollen.

void setup() 
{
  Serial.begin(9600);
  
  pinMode(Button01,  INPUT);
  pinMode(Button02,  INPUT);
  pinMode(Button03,  INPUT);

  radio.begin();
  radio.setChannel(108);    //Freq (Selected) = 2400 + CH (Selected) => 2400+108 = 2508MHz
  radio.openWritingPipe(address); // Setzen der Sendeadresse zur Übermittlung der Daten
  radio.setPALevel(RF24_PA_MIN); // Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
  radio.setDataRate( RF24_250KBPS );
  radio.stopListening(); // Das angeschlossene Modul wird als Sender konfiguriert
}

void loop() 
{
  Button1 = digitalRead(Button01);
    radio.write(&Button1, sizeof(Button1)); //Senden des Schalterstatus zum Empfänger
    Serial.print("Button1:");
    Serial.println(Button1);  
     
  Button2 = digitalRead(Button02);
    radio.write(&Button2, sizeof(Button2));
    Serial.print("Button2:");
    Serial.println(Button2);
        
  Button3 = digitalRead(Button03);
    radio.write(&Button3, sizeof(Button3));
    Serial.print("Button3:");
    Serial.println(Button3);

  xAchse = analogRead(Joyx);
    radio.write(&xAchse, sizeof(xAchse));
    Serial.print("X-Achse:");
    Serial.println(xAchse);
     
  yAchse = analogRead(Joyy);
    radio.write(&yAchse, sizeof(yAchse));
    Serial.print("Y-Achse:");
    Serial.println(yAchse);

    delay(10);
}

Receiver

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

const int Lase = 2;
const int Lich = 3;

const int Step1 = 4;
const int Direct1 = 5;
const int Step2 = 6;
const int Direct2 = 9;

const int ENA1 = 10;
const int ENA2 = 11;

Servo myservo;

RF24 radio(7, 8); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instanz um das Modul zu starten

const byte address[6] = "50001";  //Adresse, auf dem die Empfangsdaten gesendet werden sollen.

void setup() 
{
  Serial.begin(9600);

  myservo.attach(12);
  myservo.write(90);

  radio.begin();
  radio.setChannel(108);    //Freq (Selected) = 2400 + CH (Selected) => 2400+108 = 2508MHz
  radio.openReadingPipe(0,  address); // Setzen der Sendeadresse zur Übermittlung der Daten
  radio.setPALevel(RF24_PA_MIN);// Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
  radio.setDataRate( RF24_250KBPS );
  radio.startListening(); // Das angeschlossene Modul wird als Sender konfiguriert

  pinMode(Lich, OUTPUT);
  pinMode(Lase, OUTPUT);

  pinMode(Step1,OUTPUT);
  pinMode(Direct1,OUTPUT);
  pinMode(Step2,OUTPUT);
  pinMode(Direct2,OUTPUT);  
  pinMode(ENA1,OUTPUT);
  pinMode(ENA2,OUTPUT);

  digitalWrite(Step1,LOW);
  digitalWrite(Step2,LOW);
    
}

void Licht ()
{
  boolean Button1 = 0;
  radio.read(&Button1, sizeof(Button1));

  if(Button1 < 2 )
  {
        Serial.print("Button1:");
        Serial.println(Button1);
    
    if  (Button1 == LOW)
      {
        digitalWrite(Lich, LOW);
      }
    if (Button1 == HIGH)
      {
        digitalWrite(Lich, HIGH);
      }
  }
}
void Laser ()
{
  int Button2;
  radio.read(&Button2, sizeof(Button2));
  
        Serial.print("Button2:");
        Serial.println(Button2);
        
    if  (Button2 == LOW)
      {
        digitalWrite(Lase, LOW);
      }
    if (Button2 == HIGH)
      {
        digitalWrite(Lase, HIGH);
      }
}

void Serv ()
{
  int Button3;
  radio.read(&Button3, sizeof(Button3));

      Serial.print("Button3:");
      Serial.println(Button3);
   
    if (Button3 == HIGH)
      {
        myservo.write(60);
      }
      if (Button3 == LOW)
      {
        myservo.write(-60);
      }
}

void Motor1 ()
{
  int Dauer1;
  int xAchse;
  radio.read(&xAchse, sizeof(xAchse));
  Serial.print("X-Achse: ");
  Serial.println(xAchse);
  digitalWrite(ENA1,LOW);

  if(  (xAchse >=510) && (xAchse <= 520)  )
    {
      digitalWrite(ENA1,HIGH);
    }
      else
        {
          if  (xAchse < 510)
            {
              digitalWrite(Direct1,LOW);
              digitalWrite(Step1,HIGH);
              Dauer1 = map(xAchse,0,509,10,200);
              delay(Dauer1);
              digitalWrite(Step1,LOW);
              delayMicroseconds(Dauer1);
            }
          if  (xAchse > 520)
            {
              digitalWrite(Direct1,HIGH);
              digitalWrite(Step1,HIGH);
              Dauer1 = map(xAchse,521,1023,200,10);
              delay(Dauer1);
              digitalWrite(Step1,LOW);
              delayMicroseconds(Dauer1);
            } 
        }
}

void Motor2 ()
{
  int Dauer2;
  int yAchse;
  
  Serial.print("Y-Achse: ");
  Serial.println(yAchse);
  radio.read(&yAchse, sizeof(yAchse));
  if(  (yAchse >=500) && (yAchse <= 510)  )
    {
    digitalWrite(ENA2,HIGH);
    }
      else
        {
          if  (yAchse < 500)
            {
              digitalWrite(Direct2,LOW);
              digitalWrite(Step2,HIGH);
              Dauer2 = map(yAchse,0,499,10,200);
              delay(Dauer2);
              digitalWrite(Step2,LOW);
              delayMicroseconds(Dauer2);
            }
          if  (yAchse > 510)
            {
              digitalWrite(Direct2,HIGH);
              digitalWrite(Step2,HIGH);
              Dauer2 = map(yAchse,511,1023,200,10);
              delay(Dauer2);
              digitalWrite(Step2,LOW);
              delayMicroseconds(Dauer2);
            }
        }              
}

void loop() 
{
  if ( radio.available())
  {
      Licht ();
      Laser ();
      Serv ();
      Motor1 ();
      Motor2 ();
    }
  
}

(deleted)

(deleted)

Danke für die schnelle Antwort !

Wenn ich das eingebe bekomme ich eine lange Errormeldung.

HauptProgramm_Transmitter:11:1: error: expected unqualified-id before '[' token

 [color=blue]int [/color]Button1 = 0;  //Der Datentyp Boolean kennt nur zwei mögliche Werte. Die zwei zulässigen Booleschen Werte sind true (wahr) und false (falsch).

 ^

HauptProgramm_Transmitter:12:1: error: expected unqualified-id before '[' token

 [color=blue]int [/color]Button2 = 0;

 ^

HauptProgramm_Transmitter:13:1: error: expected unqualified-id before '[' token

 [color=blue]int  [/color]Button3 = 0;

 ^

C:\Users\Florian **\Desktop\HauptProgramm_Transmitter\HauptProgramm_Transmitter.ino: In function 'void loop()':

HauptProgramm_Transmitter:40:3: error: 'Button1' was not declared in this scope

   Button1 = digitalRead(Button01);

   ^~~~~~~

C:\Users\Florian **\Desktop\HauptProgramm_Transmitter\HauptProgramm_Transmitter.ino:40:3: note: suggested alternative: 'Button01'

   Button1 = digitalRead(Button01);

   ^~~~~~~

   Button01

HauptProgramm_Transmitter:45:3: error: 'Button2' was not declared in this scope

   Button2 = digitalRead(Button02);

   ^~~~~~~

C:\Users\Florian **\Desktop\HauptProgramm_Transmitter\HauptProgramm_Transmitter.ino:45:3: note: suggested alternative: 'Button02'

   Button2 = digitalRead(Button02);

   ^~~~~~~

   Button02

HauptProgramm_Transmitter:50:3: error: 'Button3' was not declared in this scope

   Button3 = digitalRead(Button03);

   ^~~~~~~

C:\Users\Florian **\Desktop\HauptProgramm_Transmitter\HauptProgramm_Transmitter.ino:50:3: note: suggested alternative: 'Button03'

   Button3 = digitalRead(Button03);

   ^~~~~~~

   Button03

exit status 1
expected unqualified-id before '[' token

(deleted)

Wenn ich das mache ändert sich nichts

Serial Monitor Transmitter: (Der funktioniert)

11:30:26.285 -> Button2:0
11:30:26.332 -> Button3:0
11:30:26.332 -> X-Achse:496
11:30:26.332 -> Y-Achse:507
11:30:26.378 -> Button1:0
11:30:26.378 -> Button2:0
11:30:26.378 -> Button3:0
11:30:26.378 -> X-Achse:496
11:30:26.378 -> Y-Achse:507
11:30:26.424 -> Button1:0
11:30:26.424 -> Button2:0
11:30:26.424 -> Button3:0
11:30:26.470 -> X-Achse:496
11:30:26.470 -> Y-Achse:507
11:30:26.470 -> Button1:0
11:30:26.470 -> Button2:0

Serial Monitor Receiver:

11:31:05.812 -> Button1:0
11:31:05.812 -> Button2:496
11:31:05.812 -> Button3:507
11:31:05.859 -> X-Achse: 0
11:31:05.859 -> Y-Achse: 0
11:31:05.859 -> Button1:0
11:31:05.859 -> Button2:496
11:31:05.905 -> Button3:507
11:31:05.905 -> X-Achse: 0
11:31:05.905 -> Y-Achse: 0
11:31:05.951 -> Button1:0
11:31:05.951 -> Button2:496
11:31:05.951 -> Button3:507
11:31:05.951 -> X-Achse: 0
11:31:05.997 -> Y-Achse: 0
11:31:05.997 -> Button1:0
11:31:05.997 -> Button2:496
11:31:06.043 -> Button3:507
11:31:06.043 -> X-Achse: 0
11:31:06.043 -> Y-Achse: 0
11:31:06.043 -> Button1:0
11:31:06.090 -> Button2:496
11:31:06.090 -> Button3:507
11:31:06.090 -> X-Achse: 0
11:31:06.090 -> Y-Achse: 0
11:31:06.137 -> Button1:0
11:31:06.137 -> Button2:496

(deleted)

ich habe alle int der Button auf boolean ausgetauscht aber es hat sich nichts geändert.

(deleted)

OK Danke für deine Bemühung

Falls jemand noch eine Idee hat bitte Melden.

Has du denn mal versucht, einen eindeutigen Zahlen-Wert zu senden ?
Nicht einfach nur HIGH oder LOW bzw. TRUE oder FALSE ?
Soweit mit das bekannt ist, wird da ein String versendet.

Und hast du das mal mit einem Beispiel aus der Library versucht ?
Normalerweise sind die Beispiele sehr gut dokumentiert und funktionieren in der Regel auch.
Also würde ich mal mit einem simplen Beispiel starten.

Leider habe ich mit den Transceivern bisher noch nicht gearbeitet und kenne daher die Libs nicht.

Edit:
Poste doch mal einen Hyperlink, welche Library du verwendest.

Hallo

Ich kann auch nur empfehlen INT zu schicken das hat bei mir immer reibungslos funktioniert.

zum Senden:

int Schalter = 0;

//Code zum Setzen

radio.write(&Schalter, sizeof(Schalter));

zum Empfangen

int input = 0;

Loop:
if (radio.available())
{
radio.read(&input, sizeof(input));
Serial.println(input);
}

schau mal ob nur ein ganz einfacher Code geht. Mit nur dem notwendigsten.

eoun46055:
Ich kann auch nur empfehlen INT zu schicken das hat bei mir immer reibungslos funktioniert.

Danke, das ist doch mal ein guter Hinweis an den TO.

Die Libarys habe ich hier heruntergeladenhttps://github.com/nRF24/RF24

Ich habe auch mittlerweile alle boolean Werte wieder zu int gemacht funktioniert aber immer noch nicht.

Danke für die Antworten

Hast du denn auch ein Beispiel aus der Library verwendet ?

Ich kann mir nicht vorstellen, dass das nicht funktioniert.
Dann zeig doch mal ein Foto deines Aufbaus, in dem wir alle Verbindungen erkennen können.

Probier mal die Library aus dem Library Manager

Leider Funktionieren die Programme auch nur mäßig. Aber ein Hello World Programm funktioniert.
Die Library habe ich schon installiert.

Anschluss im Anhang:

floriank:
Leider Funktionieren die Programme auch nur mäßig. Aber ein Hello World Programm funktioniert.
Die Library habe ich schon installiert.

Und was heißt das genau ?
Da können wir kaum etwas mit anfangen.

Wenn wir weiter helfen sollen, brauchen wir auch genauere Angaben.

Und ein Elko an der Spannung 3,3V zum Transceiver könnte Wunder wirken.

Einen Kondensator mit 10 uF habe ich schon angelötet. Und einige Test Programme funktionieren schon. Aber warum kann bei meinen Programm der Button wert mehr als 2 annehmen habe ja eine if Funktion gesetzt.