Ich musste das Programm nochmal grob über arbeiten konnte es erst jetzt hinzufügen.
Ich hoffe ich kann mit diesen Programm jemanden helfen.
Noch mal Danke für die Unterstützung!
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
RF24 radio(7, 8); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instanz um das Modul zu starten
//Der Datentyp Boolean kennt nur zwei mögliche Werte. Die zwei zulässigen Booleschen Werte sind true (wahr) und false (falsch).
const byte address[6] = "0A1z9"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen.
struct Data_Package
{
byte Button1;
byte Button2;
byte Button3;
int xAchse;
int yAchse;
};
Data_Package data; //Create a variable with the above structur
void setup()
{
Serial.begin(115200);
pinMode(Button01, INPUT_PULLUP);
pinMode(Button02, INPUT_PULLUP);
pinMode(Button03, INPUT_PULLUP);
radio.begin();
radio.setChannel(108); //Freq (Selected) = 2400 + CH (Selected) => 2400+108 = 2508MHz
radio.openWritingPipe(address); // Setzen der Sendeadresse zur Übermittlung der Daten
radio.setAutoAck(false);
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_1MBPS );
radio.stopListening(); // Das angeschlossene Modul wird als Sender konfiguriert
// Set initial default values
// Values from 0 to 255. When Joystick is in resting position, the value is in the middle, or 127. We actually map the pot value from 0 to 1023 to 0 to 255 because that's one BYTE value
data.Button1 = 0;
data.Button2 = 0;
data.Button3 = 0;
data.yAchse = 217;
data.xAchse = 217;
}
void loop()
{
But1 ();
But2 ();
But3 ();
XAch ();
YAch ();
radio.write(&data, sizeof(Data_Package));
}
void But1 ()
{
data.Button1 = digitalRead(Button01);
Serial.print("Button1:");
Serial.println(data.Button1);
}
void But2 ()
{
data.Button2 = digitalRead(Button02);
Serial.print("Button2:");
Serial.println(data.Button2);
}
void But3 ()
{
data.Button3 = digitalRead(Button03);
Serial.print("Button3:");
Serial.println(data.Button3);
}
void XAch ()
{
data.xAchse = analogRead(Joyx);
Serial.print("X-Achse:");
Serial.println(data.xAchse);
}
void YAch ()
{
data.yAchse = analogRead(Joyy);
Serial.print("Y-Achse:");
Serial.println(data.yAchse);
}
Receiver:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
Servo myservo;
#define Lase 2
#define Lich 3
#define Step1 4
#define Direct1 5
#define Step2 6
RF24 radio(7, 8); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instanz um das Modul zu starten
#define Direct2 9
#define ENA1 10
#define ENA2 11
const byte address[6] = "0A1z9"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen.
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
// Values from 0 to 255. When Joystick is in resting position, the value is in the middle, or 127. We actually map the pot value from 0 to 1023 to 0 to 255 because that's one BYTE value
// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package
{
byte Button1;
byte Button2;
byte Button3;
int xAchse;
int yAchse;
};
Data_Package data; //Create a variable with the above structure
void setup()
{
myservo.attach(12);
myservo.write(90);
pinMode(Lich, OUTPUT);
pinMode(Lase, OUTPUT);
pinMode(Step1,OUTPUT);
pinMode(Direct1,OUTPUT);
pinMode(Step2,OUTPUT);
pinMode(Direct2,OUTPUT);
pinMode(ENA1,OUTPUT);
pinMode(ENA2,OUTPUT);
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.setAutoAck(false);
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_1MBPS );
radio.startListening(); // Das angeschlossene Modul wird als Empfänger konfiguriert
Serial.begin(115200);
}
void loop()
{
// Check whether we keep receving data, or we have a connection between the two modules
currentTime = millis();
if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function
}
// Check whether there is data to be received
if (radio.available()) {
radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
lastReceiveTime = millis(); // At this moment we have received the data
}
Licht ();
Laser ();
Serv ();
Motor1 ();
Motor2 ();
Serial.println();
}
void Licht ()
{
Serial.print("Button1:");
Serial.println(data.Button1);
if (data.Button1 == 0)
{
digitalWrite(Lich, LOW);
}
if (data.Button1 == 1)
{
digitalWrite(Lich, HIGH);
}
}
void Laser ()
{
Serial.print("Button2:");
Serial.println(data.Button2);
if (data.Button2 == 0)
{
digitalWrite(Lase, LOW);
}
if (data.Button2 == 1)
{
digitalWrite(Lase, HIGH);
}
}
void Serv ()
{
Serial.print("Button3:");
Serial.println(data.Button3);
if (data.Button3 == 1)
{
myservo.write(60);
}
if (data.Button3 == 0)
{
myservo.write(-60);
}
}
void Motor1 ()
{
int Dauer1;
Serial.print("X-Achse: ");
Serial.println(data.xAchse);
digitalWrite(ENA1,LOW);
if( (data.xAchse >=490) && (data.xAchse <= 500) )
{
digitalWrite(ENA1,HIGH);
}
else
{
if (data.xAchse < 490)
{
digitalWrite(Direct1,LOW);
digitalWrite(Step1,HIGH);
Dauer1 = map(data.xAchse,0,509,10,200);
delay(Dauer1);
digitalWrite(Step1,LOW);
delayMicroseconds(Dauer1);
}
if (data.xAchse > 500)
{
digitalWrite(Direct1,HIGH);
digitalWrite(Step1,HIGH);
Dauer1 = map(data.xAchse,521,1023,200,10);
delay(Dauer1);
digitalWrite(Step1,LOW);
delayMicroseconds(Dauer1);
}
}
}
void Motor2 ()
{
int Dauer2;
Serial.print("Y-Achse: ");
Serial.println(data.yAchse);
if( (data.yAchse >=500) && (data.yAchse <= 510) )
{
digitalWrite(ENA2,HIGH);
}
else
{
if (data.yAchse < 500)
{
digitalWrite(Direct2,LOW);
digitalWrite(Step2,HIGH);
Dauer2 = map(data.yAchse,0,499,10,200);
delay(Dauer2);
digitalWrite(Step2,LOW);
delayMicroseconds(Dauer2);
}
if (data.yAchse > 510)
{
digitalWrite(Direct2,HIGH);
digitalWrite(Step2,HIGH);
Dauer2 = map(data.yAchse,511,1023,200,10);
delay(Dauer2);
digitalWrite(Step2,LOW);
delayMicroseconds(Dauer2);
}
}
}
void resetData()
{
data.Button1 = 0;
data.Button2 = 0;
data.Button3 = 0;
data.yAchse = 495;
data.xAchse = 505;
}
[code]