Wie senden und empfangen per IR in einem Sketch realisieren?

Hallo,

ich versuche gerade mit meinen Arduino UNO ein Sketch (s. Anhang) zu schreiben das über einen IR-Empfänger Signale empfangen und über eine IR-Diode Signale senden kann.
Jetzt ist es so das wenn ich die Zeile “send_obj.sendNEC(0x5EA1D827, 32);” auskommentiere kann ich zwar Signale über den IR-Empfänger empfangen und mir am Seriell Monitor anzeigen lassen aber es werden (logischerweise) keine Signale über die IR-Diode gesedet. Wenn ich die Zeile nicht auskommentiere sendet die Diode zwar so wie sie es soll aber ich bekomm über den IR-Empfänger keine Signale mehr rein :~ (Seriell Monitor bleibt weiß)

Was muss ich machen damit ich beide Möglichkeiten im Sketch nutzen kann?

MfG
Rainer

#include <IRremote.h>

int ir_empfaenger = 8;        // Empfänger ist an Pin 8 (Sender an Pin 3)

IRrecv ir_obj(ir_empfaenger);
decode_results results;

IRsend send_obj;

// -----------------------------

void setup(){
  Serial.begin(9600);
  ir_obj.enableIRIn();
}

// -----------------------------

void loop(){
  if(ir_obj.decode(&results)){
    Serial.println(results.value, DEC);
    ir_obj.resume();
  }
  
  delay(500);
  // send_obj.sendNEC(0x5EA1D827, 32);    // <----- !!! ??? !!! ???
}

Sender wird nirgends definiert! Welche Libary wird genutzt?

#include <IRremote.h>

Sieht nach der IRremote Library aus :slight_smile:

versuch mal statt

IRsend send_obj;
IRsend irsend;

und danach dementsprechend auch beim Sendebefehl

irsend.sendNEC(0x5EA1D827, 32);

Denn gemäss meiner Vermutung funktioniert die Definition des Empfängers mit eigenem Namen, da du den Pin dafür im vorangehenden Code selbst definiert hast. Für den Sender funktioniert dies jedoch nicht, da dieser in der Library bereits für digital Pin 3 definiert ist, was ungefähr auch Stefans Aussage entsprechen würde. Allerdings wunderts mich dann, dass der Compiler nicht reklamiert. Kannsts ja mal ausprobieren :slight_smile:

Hallo,
“(Sender an Pin 3)”
könnte sein, das Du die “alte” nutzt.
Lese das mal durch:

Bei den Beispielen, gibt es einen Sketch “IRrecord”

Der macht nichts anderes als empfangen und senden. Da kannst Du sehen wie es
funktioniert- und das funktioniert.
Gruß und Spaß
Andreas

Hallo,

ich habe hier meinduino.de mal die serielle Datenübertragung über eine IR-Diode und einen IR-Empfänger beschrieben. Vielleicht hilft Dir das ja weiter.

Gruß,
Ralf

Beim zweiten Mal durchlesen, klingt mein Erklärungsversuch eigentlich gar nicht mehr so logisch :sweat_smile:
Würde es aber dennoch versuchen. Eventuell könntest du, wenn sonst alles nichts hilft, versuchen, das delay() weg zu lassen und durch eine millis()-Abfrage zu ersetzen. Vielleicht bringt ja das die Sachen durcheinander. Bei seriellen Übertragungen, die über mehrere Loopdurchgänge liefen und im Hintergrund mit Interrupts arbeiteten verursachten kurze delays bereits verheerende Probleme. Weiss nicht, obs hier ähnlich sein könnte.

Hi Leute,

danke für eure Hilfe, habs inzwischen hinbekommen und wollte nur nochmal die “Lösung” posten.
Des Rätsels Lösung war das ich den Empfänger nach dem senden nicht wieder mit “enableIRIn()” neu initialisiert habe. Ebenso entscheidend ist danach die kurze Pause mit dem “delay()”.

Die letzten bzw. entscheidenden Zeilen sehen nun so auch:

  // delay(500);           // <-- kann/muss raus
  send_obj.sendNEC(0x5EA1D827, 32);
  ir_obj.enableIRIn();     // <-- Lösung
  delay(100);              // <-- Lösung

Falls es noch jemanden interessiert: Habe das ganze mit der IRremote-Liberary (v0.1 - July 2009) von Ken Shirriff gemacht.

MfG
Rainer