Arduino Code funktioniert nicht?

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:

  1. Bibliotheken-Konflikte prüfen
  2. Korrektur der IRremote-Funktion
  3. Variable für Ergebnisse ändern
  4. Initialisierung der IRrecv-Klasse
  5. 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;

  }

}

Woher ich das weiß:Recherche

HotDog396 
Beitragsersteller
 21.07.2024, 19:16

#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

0
HotDog396 
Beitragsersteller
 21.07.2024, 19:03

teste kurtz

0
HotDog396 
Beitragsersteller
 21.07.2024, 19:06
@HotDog396
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

0