Arduino Code funktioniert nicht?
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
}
}
1 Antwort
Es scheint, dass Ihr Arduino-Sketch aufgrund der Integration mehrerer Bibliotheken und einiger Logikprobleme nicht wie erwartet funktioniert. Hier sind einige Schritte und Vorschläge zur Fehlersuche und Korrektur des Codes:
- Bibliotheken-Konflikte prüfen
- Korrektur der IRremote-Funktion
- Variable für Ergebnisse ändern
- Initialisierung der IRrecv-Klasse
- Code-Kommentar und Struktur verbessern
Hier ist eine überarbeitete Version des Codes:
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <IRremote.h>
// Pin-Definitionen
const int receiverPin = 4;
const int switchPin = 2;
const int xAxisPin = A0;
const int yAxisPin = A1;
// Initialisierung des IR-Empfängers
IRrecv irrecv(receiverPin);
decode_results results;
uint32_t lastDecodedRawData = 0;
// Setup-Funktion
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(switchPin, INPUT_PULLUP);
Mirf.cePin = 9;
Mirf.csnPin = 10;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"Sen01");
Mirf.payload = sizeof(unsigned int);
Mirf.channel = 3;
Mirf.config();
}
unsigned int adata = 0;
void translateIR() {
if (results.decode_type == UNKNOWN) {
lastDecodedRawData = results.value;
Serial.print("Empfangener IR-Code: 0x");
Serial.println(results.value, HEX);
}
}
void loop() {
// Überprüfen, ob ein IR-Signal empfangen wurde
if (irrecv.decode(&results)) {
translateIR();
irrecv.resume();
}
// Lesen des Schalter- und Analogwerte
int switchValue = digitalRead(switchPin);
int xValue = analogRead(xAxisPin);
int yValue = analogRead(yAxisPin);
// Überprüfen der empfangenen IR-Codes und Setzen von adata entsprechend
if (lastDecodedRawData == 0xAD52FF00) {
adata = 12006;
} else if (lastDecodedRawData == 0xBF40FF00) {
adata = 12005;
} else if (lastDecodedRawData == 0xBC43FF00) {
adata = 12004;
} else if (lastDecodedRawData == 0xBB44FF00) {
adata = 12003;
}
// Überprüfen des Schalterwerts und Setzen von adata
if (switchValue == LOW) {
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];
data[0] = adata & 0xFF;
data[1] = adata >> 8;
Mirf.setTADDR((byte *)"Rec01");
Mirf.send(data);
while (Mirf.isSending()) {}
delay(20);
adata = 0;
}
}
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <IRremote.hpp>
// Pin-Definitionen
const int switchPin = 2;
const int xAxisPin = A0;
const int yAxisPin = A1;
// Initialisierung des IR-Empfängers
#define IR_RECEIVE_PIN 4
void setup() {
Serial.begin(9600);
IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK); // Initialize IR receiver
pinMode(switchPin, INPUT_PULLUP);
Mirf.cePin = 9;
Mirf.csnPin = 10;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"Sen01");
Mirf.payload = sizeof(unsigned int);
Mirf.channel = 3;
Mirf.config();
}
unsigned int adata = 0;
void translateIR() {
if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
uint32_t lastDecodedRawData = IrReceiver.decodedIRData.decodedRawData;
Serial.print("Empfangener IR-Code: 0x");
Serial.println(lastDecodedRawData, HEX);
}
}
void loop() {
// Überprüfen, ob ein IR-Signal empfangen wurde
if (IrReceiver.decode()) {
translateIR();
IrReceiver.resume();
}
// Lesen des Schalter- und Analogwerte
int switchValue = digitalRead(switchPin);
int xValue = analogRead(xAxisPin);
int yValue = analogRead(yAxisPin);
// Überprüfen der empfangenen IR-Codes und Setzen von adata entsprechend
uint32_t lastDecodedRawData = IrReceiver.decodedIRData.decodedRawData;
if (lastDecodedRawData == 0xAD52FF00) {
adata = 12006;
} else if (lastDecodedRawData == 0xBF40FF00) {
adata = 12005;
} else if (lastDecodedRawData == 0xBC43FF00) {
adata = 12004;
} else if (lastDecodedRawData == 0xBB44FF00) {
adata = 12003;
}
// Überprüfen des Schalterwerts und Setzen von adata
if (switchValue == LOW) {
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];
data[0] = adata & 0xFF;
data[1] = adata >> 8;
Mirf.setTADDR((byte *)"Rec01");
Mirf.send(data);
while (Mirf.isSending()) {}
delay(20);
adata = 0;
}
}
funktioniert nicht
Thank you for using the IRremote library!
It seems, that you are using a old version 2.0 code / example.
This version is no longer supported!
Please use one of the new code examples from the library,
available at "File > Examples > Examples from Custom Libraries / IRremote".
Or downgrade your library to version 2.6.0.
Start with the SimpleReceiver or SimpleSender example.
The examples are documented here:
https://github.com/Arduino-IRremote/Arduino-IRremote#examples-for-this-library
A guide how to convert your 2.0 program is here:
https://github.com/Arduino-IRremote/Arduino-IRremote#converting-your-2x-program-to-the-4x-version
könntest du das machen bin zu dumm dafür xD
teste kurtz