IR Remote: Bei bestimmten Tasten Strom an einen PIN anlegen

Hallo zusammen,

ich hatte es zunächst mit einem kapazitiven Touch-Sensor umgesetzt, der ein Signal auf einem OUTPUT-PIN gibt und sich dadurch der Stromkreis eines kleinen Lasers schließt, sodass er angeht.
Ich möchte es jetzt aber lieber mit einer IR Fernbedienung umsetzen und habe dafür so eine billige China Fernbedienung.
Mit den Anleitungen habe ich bereits geschafft, dass ich die Werte einlesen kann, ich schaffe es aber nicht, dass der Laser angeht, wenn ich eine Taste drücke.
Könnt ihr mir helfen?

Du musst das +Kabel an Pin D49 anklemmen.
Danach den Arduino neu starten.
Wenn du weitere Fragen hast, einfach melden.

Geht es nur an D49?
Ich bräuchte nämlich 2 freie Pins, für 2 Laser...

Witzbold...
Du stellst Fragen, lieferst aber NULL in Worten NULL Informationen.
Wie sollen wir helfen ?
Nur du sitzt vor deinem Projekt.

Sorry.
Also nochmal:
Ich habe einen kleinen Laser, der einfach per +/- angeschlossen werden muss.
Mit dem Touch-Button habe ich das +-Kabel in einen PIN-Output geführt und in Arduino programmiert, dass wenn der Knopf berührt wird, dieser Output-PIN "HIGH" sein soll. Der Laser ging an.

Das gleiche möchte ich jetzt mit einer IR Fernbedienung umsetzen, wenn man einen bestimmten Knopf drückt, funktioniert aber leider nicht, wie ich es mir gedacht habe.

Habe ich es falsch angeschlossen, geht es so überhaupt richtig?

qwertz2017:
Sorry.
Also nochmal:
Ich habe einen kleinen Laser, der einfach per +/- angeschlossen werden muss.
Mit dem Touch-Button habe ich das +-Kabel in einen PIN-Output geführt und in Arduino programmiert, dass wenn der Knopf berührt wird, dieser Output-PIN "HIGH" sein soll. Der Laser ging an.

Das gleiche möchte ich jetzt mit einer IR Fernbedienung umsetzen, wenn man einen bestimmten Knopf drückt, funktioniert aber leider nicht, wie ich es mir gedacht habe.

Habe ich es falsch angeschlossen, geht es so überhaupt richtig?

Ob du es falsch angeschlossen hast, können wir leider immer noch nicht sehen.

Da brauchen wir ein Schaltbild.

Warum deine IR-Fernbedienung nicht funktioniert, können wir auch nicht sehen, da brauchen wir den Sketch.
Den Sketch bitte in Code-Tags posten.

Hast du denn die Fernbedienung schon getestet ?
Kommt da ein entsprechender "Code" raus ?

Nochmal, wir sehen nicht, was du da machst.
Also bitte genauere Angaben.

Foto auf der die Verkabelung sichtbar ist, geht evtl. auch.

Klickbarer Link zur Fernbedienung?

Hi

Wenn Du die 'Werte' bereits von der IR-Fernbedienung einlesen kannst, was spricht dagegen, Diese als Einschalt-Kriterium dafür herzunehmen, den Laser am Pin so-und-so anzuschalten?

Wie viel mA nimmt sich der Laser? Nicht, daß Du Dir den Arduino schrottest, da der zweite Laser den maximal-Strom des Arduino ausschöpft und plötzlich alle Lichter aus gehen ...

Aktuell hast Du was in der Art:
if (pin1==HIGH) digitalWrite(13,HIGH);

Wenn Du darauf was in der Art machst:
if (empfangen==0x3245) digitalWrite(13,HIGH);

??

Natürlich wirst Du noch einen weiteren Knopf benötigen, mit Dem Du den (die) Laser wieder aus bekommst.

MfG

@HotSystems
Wenn, wäre die Antwort '42' gewesen ... so viel Zeit und Richtigkeit MUSS sein :wink:
(per Anhalter durch die Galaxis)

postmaster-ino:
@HotSystems
Wenn, wäre die Antwort '42' gewesen ... so viel Zeit und Richtigkeit MUSS sein :wink:
(per Anhalter durch die Galaxis)

Ok, Pin 42 geht bei richtiger Definition natürlich auch, völlig korrekt.

7 Posts und die Fragen korrelieren. Aber wo zum Teufel kommen die 2 Karma her? Weihnachtsbescherung der verpeilten Forensoftware? :wink:

Soll wohl motivierend wirken.

Hab mir alles durchgelesen und ich glaube das ich die Lösung habe!

  1. Du musst den IR Receiver an den Arduino anschließen
  2. Spiele den Sketch rauf und drücke die Tasten die du verwenden willst auf deiner IR Fernbediehung oder jeder anderen Fernbediehung.
  3. es werden dir in der Konsole Werte glaube in Hex ausgegebn die notierst du dir für jede Taste!
  4. Immer die Unknown decode type nehmen!
  5. Öffne den 2 Sketch und uploade den auf den Arduino.
  6. Gib die Codes ein die du dir vorher notiert hast.
  7. Es funktioniert.
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <IRremote.h>

//------------------------------------------------------------------------------
// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)
//
int recvPin = 12;
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 == SHARP) {
    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 == SHARP) {
      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
  }
}
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>



int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;

#define BUTTON_ON 0xCE1972FD
#define BUTTON_OFF 0xD4DD0381
#define BUTTON_RED 0xE85952E1
#define BUTTON_BLUE 0xA2672345
#define BUTTON_GREEN 0x78CDA4DD
#define BUTTON_WHITE 0x9BA392C1

int blue_LED = 2;
int red_LED = 4;
int green_LED = 7;


void setup()
{
  pinMode(blue_LED, OUTPUT);
  pinMode(red_LED, OUTPUT);
  pinMode(green_LED, OUTPUT);
  
  irrecv.enableIRIn();
}
void loop() {

  if (irrecv.decode(&results))
  {
    if (results.value == BUTTON_OFF)
    {
      digitalWrite(blue_LED, LOW);
      digitalWrite(red_LED, LOW);
      digitalWrite(green_LED, LOW);
    }
    if (results.value == BUTTON_ON)
    {
      digitalWrite(blue_LED, HIGH);
      digitalWrite(red_LED, HIGH);
      digitalWrite(green_LED, HIGH);
    }
    if (results.value == BUTTON_BLUE)
    {
      digitalWrite(blue_LED, HIGH);
    }
    if (results.value == BUTTON_RED)
    {
      digitalWrite(red_LED, HIGH);
    }
    if (results.value == BUTTON_GREEN)
    {
      digitalWrite(green_LED, HIGH);
    }
     if (results.value == BUTTON_WHITE)
    {
      digitalWrite(blue_LED, HIGH);
      digitalWrite(red_LED, HIGH);
      digitalWrite(green_LED, HIGH);
    }
    irrecv.resume();
  }
}

Grüße Manuel :smiley:

Ich frage mich nur, was du mit der Library "boarddefs.h" und der "ir_lego_PF_BitStreamEncoder.h" willst ?

Ich hab den Sketch nicht geschrieben aber es funktioniert.

Also nimmst du immer alles, was du findest ?
Copy&Paste ist nie gut, ohne es sich vorher genauer anzusehen.

Und ich habe nicht gesagt, dass es nicht funktioniert.

Ich wollte nur helfen bin kein Profi will nur mein gesammeltes wissen weitergeben. Im Internet findet man so viele nützliche Sketches da wäre es doch verlorene Zeit wenn man die selber schreiben würde.

Wenn man Ratschläge gibt, sollte man schon grundlegend verstanden haben, was man tut, sonst kann das auch nach hinten los gehen. Sprich: Du kannst Dich sonst auch sehr schnell lächerlich machen. Dabei geht es nicht darum, Fehler zu machen (die sind dafür da, gemacht zu werden), sondern unreflektiert (komisches) Zeugs als Lösung anzubieten.

Gruß Tommy

Ja, das stimmt.
Ist auch ok so, aber prüfen muss man schon, damit nichts falsches rüber kommt.

Also ruhig weiter machen. Nur die Libraries sind überflüssig.