IRremote und JoyStick funktionieren nicht
#include <SPI.h> // Bibliothek für SPI-Kommunikation
#include <Mirf.h> // Bibliothek für nRF24L01
#include <nRF24L01.h> // Treiber für nRF24L01
#include <MirfHardwareSpiDriver.h> // Hardware-SPI-Treiber für Mirf
#include <IRremote.h> // Bibliothek für IR-Kommunikation
// Pin-Definitionen
int receiver = 4; // Pin für den IR-Empfänger
const int SW = 2; // Pin für den Schalter
const int X = A0; // Analog-Pin für X-Achse
const int Y = A1; // Analog-Pin für Y-Achse
// Initialisierung des IR-Empfängers
IRrecv irrecv(receiver);
IRsend results;
uint32_t last_decodedRawData = 0; // Variable zum Speichern des letzten IR-Codes
// Funktion zur Verarbeitung des empfangenen IR-Codes
void translateIR() {
if (irrecv.decodedIRData.flags) {
// Wenn ein Wiederholungscode empfangen wird, den letzten empfangenen Code verwenden
irrecv.decodedIRData.decodedRawData = last_decodedRawData;
} else {
// Den empfangenen Code im seriellen Monitor ausgeben
Serial.print("Empfangener IR-Code: 0x");
Serial.println(irrecv.decodedIRData.decodedRawData, HEX);
}
}
// Setup-Funktion, die einmal beim Starten des Programms ausgeführt wird
void setup() {
Serial.begin(9600); // Startet die serielle Kommunikation mit 9600 Baud
irrecv.enableIRIn(); // Aktiviert den IR-Empfänger
pinMode(SW, INPUT); // Setzt den Schalter-Pin als Eingang
digitalWrite(SW, HIGH); // Aktiviert den Pull-up-Widerstand für den Schalter
Mirf.cePin = 9; // Setzt den Chip Enable (CE) Pin für den nRF24L01
Mirf.csnPin = 10; // Setzt den Chip Select Not (CSN) Pin für den nRF24L01
Mirf.spi = &MirfHardwareSpi; // Setzt den SPI-Treiber für Mirf
Mirf.init(); // Initialisiert den nRF24L01
Mirf.setRADDR((byte *)"Sen01"); // Setzt die Adresse des Senders
Mirf.payload = sizeof(unsigned int); // Setzt die Payload-Größe auf die Größe eines unsigned int
Mirf.channel = 3; // Setzt den Kommunikationskanal auf 3
Mirf.config(); // Konfiguriert den nRF24L01
}
unsigned int adata = 0; // Variable zum Speichern der zu sendenden Daten
// Hauptschleife, die kontinuierlich ausgeführt wird
void loop() {
// Überprüfen, ob ein IR-Signal empfangen wurde
if (irrecv.decode()) {
translateIR(); // Verarbeitung des empfangenen IR-Codes
irrecv.resume(); // Bereit zum Empfang des nächsten IR-Codes
}
// Lesen des Schalter- und Analogwerte
int swValue = digitalRead(SW); // Lesen des Schalterzustands
int xValue = analogRead(X); // Lesen des X-Achsen-Werts
int yValue = analogRead(Y); // Lesen des Y-Achsen-Werts
// Überprüfen der empfangenen IR-Codes und Setzen von adata entsprechend
if (last_decodedRawData == 0xAD52FF00) {
adata = 12006;
} else if (last_decodedRawData == 0xBF40FF00) {
adata = 12005;
} else if (last_decodedRawData == 0xBC43FF00) {
adata = 12004;
} else if (last_decodedRawData == 0xBB44FF00) {
adata = 12003;
}
// Überprüfen des Schalterwerts und Setzen von adata
if (swValue == 0) {
adata = 2103;
}
// Überprüfen der Analogwerte und Setzen von adata
if (yValue < 1024 && yValue > 6 && xValue > 150 && xValue < 800) {
adata = 213;
} else if (yValue < 512 && yValue > -1 && xValue > 200 && xValue < 700) {
adata = 312;
} else if (xValue < 509 && xValue > -1 && yValue > 200 && yValue < 750) {
adata = 231;
} else if (xValue < 1024 && xValue > 515 && yValue > 450 && yValue < 750) {
adata = 321;
} else if (xValue < 514 && xValue > 510 && yValue < 511 && yValue > 507) {
adata = 123;
}
// Senden der Daten über Mirf, wenn adata gesetzt wurde
if (adata != 0) {
byte data[Mirf.payload]; // Array zum Speichern der zu sendenden Daten
data[0] = adata & 0xFF; // Niedriges Byte von adata
data[1] = adata >> 8; // Hohes Byte von adata
Mirf.setTADDR((byte *)"Rec01"); // Setzt die Adresse des Empfängers
Mirf.send(data); // Sendet die Daten
while (Mirf.isSending()) {} // Warten, bis das Senden abgeschlossen ist
delay(20); // Kurze Pause, um das Senden zu beenden
adata = 0; // Zurücksetzen von adata nach dem Senden
}
}