IR Übertragung

Ich hab mir LAOMAO Infrarot Sender und Empfänger bestellt, und wollte sie gleich ausprobieren!
Ich hab ganz simple alle Pins RICHTIG angeschlossen, wie es auf dem Datenblatt beschrieben wurde. Danach habe ich einen simplen Code (unten) zum empfangen und decoden von einer Fernsehfernbedienung benutzt.
Aber irgendwie bekomme ich falsche Ergebnisse. Egal welchen IR Remote Library Code ich benutze, nichts funktioniert?!
Mit falschen Ergebnissen meine ich, dass es bei diesem Code die Fernbedienung der bestimmten Marke angezeigt werden sollte, was es bei mir nicht tut!

Was soll ich (anders) machen?

(Benutze Arduino UNO)

//------------------------------------------------------------------------------
// Include the IRremote library header
//
#include <IRremote.h>

//------------------------------------------------------------------------------
// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)
//
int recvPin = 11;
IRrecv irrecv(recvPin);

//+=============================================================================
// Configure the Arduino
//
void  setup ( )
{
  Serial.begin(9600);   // Status message will be sent to PC at 9600 baud
  irrecv.enableIRIn();  // Start the receiver
}

//+=============================================================================
// Display IR code
//
void  ircode (decode_results *results)
{
  // Panasonic has an Address
  if (results->decode_type == PANASONIC) {
    Serial.print(results->address, HEX);
    Serial.print(":");
  }

  // Print Code
  Serial.print(results->value, HEX);
}

//+=============================================================================
// Display encoding type
//
void  encoding (decode_results *results)
{
  switch (results->decode_type) {
    default:
    case UNKNOWN:      Serial.print("UNKNOWN");       break ;
    case NEC:          Serial.print("NEC");           break ;
    case SONY:         Serial.print("SONY");          break ;
    case RC5:          Serial.print("RC5");           break ;
    case RC6:          Serial.print("RC6");           break ;
    case DISH:         Serial.print("DISH");          break ;
    case SHARP:        Serial.print("SHARP");         break ;
    case JVC:          Serial.print("JVC");           break ;
    case SANYO:        Serial.print("SANYO");         break ;
    case MITSUBISHI:   Serial.print("MITSUBISHI");    break ;
    case SAMSUNG:      Serial.print("SAMSUNG");       break ;
    case LG:           Serial.print("LG");            break ;
    case WHYNTER:      Serial.print("WHYNTER");       break ;
    case AIWA_RC_T501: Serial.print("AIWA_RC_T501");  break ;
    case PANASONIC:    Serial.print("PANASONIC");     break ;
    case DENON:        Serial.print("Denon");         break ;
  }
}

//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpInfo (decode_results *results)
{
  // Check if the buffer overflowed
  if (results->overflow) {
    Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWBUF");
    return;
  }

  // Show Encoding standard
  Serial.print("Encoding  : ");
  encoding(results);
  Serial.println("");

  // Show Code & length
  Serial.print("Code      : ");
  ircode(results);
  Serial.print(" (");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
}

//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpRaw (decode_results *results)
{
  // Print Raw data
  Serial.print("Timing[");
  Serial.print(results->rawlen-1, DEC);
  Serial.println("]: ");

  for (int i = 1;  i < results->rawlen;  i++) {
    unsigned long  x = results->rawbuf[i] * USECPERTICK;
    if (!(i & 1)) {  // even
      Serial.print("-");
      if (x < 1000)  Serial.print(" ") ;
      if (x < 100)   Serial.print(" ") ;
      Serial.print(x, DEC);
    } else {  // odd
      Serial.print("     ");
      Serial.print("+");
      if (x < 1000)  Serial.print(" ") ;
      if (x < 100)   Serial.print(" ") ;
      Serial.print(x, DEC);
      if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one
    }
    if (!(i % 8))  Serial.println("");
  }
  Serial.println("");                    // Newline
}

//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpCode (decode_results *results)
{
  // Start declaration
  Serial.print("unsigned int  ");          // variable type
  Serial.print("rawData[");                // array name
  Serial.print(results->rawlen - 1, DEC);  // array size
  Serial.print("] = {");                   // Start declaration

  // Dump data
  for (int i = 1;  i < results->rawlen;  i++) {
    Serial.print(results->rawbuf[i] * USECPERTICK, DEC);
    if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one
    if (!(i & 1))  Serial.print(" ");
  }

  // End declaration
  Serial.print("};");  // 

  // Comment
  Serial.print("  // ");
  encoding(results);
  Serial.print(" ");
  ircode(results);

  // Newline
  Serial.println("");

  // Now dump "known" codes
  if (results->decode_type != UNKNOWN) {

    // Some protocols have an address
    if (results->decode_type == PANASONIC) {
      Serial.print("unsigned int  addr = 0x");
      Serial.print(results->address, HEX);
      Serial.println(";");
    }

    // All protocols have data
    Serial.print("unsigned int  data = 0x");
    Serial.print(results->value, HEX);
    Serial.println(";");
  }
}

//+=============================================================================
// The repeating section of the code
//
void  loop ( )
{
  decode_results  results;        // Somewhere to store the results

  if (irrecv.decode(&results)) {  // Grab an IR code
    dumpInfo(&results);           // Output the results
    dumpRaw(&results);            // Output the results in RAW format
    dumpCode(&results);           // Output the results as source code
    Serial.println("");           // Blank line between entries
    irrecv.resume();              // Prepare for the next value
  }
}

Dann poste mal einen Link deiner IR-Teile.

Was verstehst Du unter "falsche Ergebnisse"? Weßt Du welcher Code ankommen soll?

Gruß Tommy

Flihx: Was soll ich (anders) machen?

Wenn die IR-Empfänger tatsächlich die 1838B sind, dann solltest du einfach mal diese IR-Library verwenden:

IRRemote von Ken Shirriff,

damit laufen die originalen IR-Empfänger problemlos. Dann verwende das Beispiel "IRrecvDemo" davon, das funktioniert. Wichtig bei dem Empfänger: unbedingt nach Datenblatt und beigefügtem Schaltbild anschließen.

Danach kannst du auch andere Sketche testen.

Ich benutze ja diese Library! Hab alles versucht, aber es hat noch nichts funktioniert. Habs bei 3 versch. Arduinos versucht, aber nichts! Hab auch versch. IR empfänger versucht, aber wieder nichts. Einfach nur komisch! Hoffe irgendwer kann mir helfen!

Flihx: Ich benutze ja diese Library! Hab alles versucht, aber es hat noch nichts funktioniert. Habs bei 3 versch. Arduinos versucht, aber nichts! Hab auch versch. IR empfänger versucht, aber wieder nichts. Einfach nur komisch! Hoffe irgendwer kann mir helfen!

Hast du denn auch das von mir vorgeschlagene Beispiel verwendet ?

Zeig uns ein Foto deines Aufbaus.

Vielen Dank, das ihr mir geantwortet habt. Aber ich glaub ich habs jetzt rausgefunden! Ich habe Ground und 5V von der IR immer an ein extra Netzteil angeschlossen. Nachdem ich es aber an den Arduino angeschlossen hab, sollte das Problem jetzt beseitigt sein!

Mal sehen wie es so wird!

Flihx:
Vielen Dank, das ihr mir geantwortet habt. Aber ich glaub ich habs jetzt rausgefunden!
Ich habe Ground und 5V von der IR immer an ein extra Netzteil angeschlossen…

Sollte dann aber auch funktionieren.

Es sei denn, du hast den GND (Netzteil <-> Arduino) nicht miteinander verbunden, oder die zusätzlichen 5 Volt sind nicht sauber/stabil genug.

Flihx:
Ich hab ganz simple alle Pins RICHTIG angeschlossen, wie es auf dem Datenblatt beschrieben wurde.

Zum Glück war alles RICHTIG angeschlossen. :wink:

Die Massen müssen verbunden sein.

grüße Uwe

Das mit der Masse wusste ich nicht, jetzt wos ihr sagt ist es mir aber eig. klar! Danke nochmals!

Flihx: Das mit der Masse wusste ich nicht, jetzt wos ihr sagt ist es mir aber eig. klar! Danke nochmals!

Ok, dann solltest du zukünftig immer daran denken, in einem "geschlossenen System" immer GND verbinden.