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?
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.
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
(per Anhalter durch die Galaxis)
Hab mir alles durchgelesen und ich glaube das ich die Lösung habe!
Du musst den IR Receiver an den Arduino anschließen
Spiele den Sketch rauf und drücke die Tasten die du verwenden willst auf deiner IR Fernbediehung oder jeder anderen Fernbediehung.
es werden dir in der Konsole Werte glaube in Hex ausgegebn die notierst du dir für jede Taste!
Immer die Unknown decode type nehmen!
Öffne den 2 Sketch und uploade den auf den Arduino.
Gib die Codes ein die du dir vorher notiert hast.
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
}
}
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.