Hallo,
ich habe ein Problem, mein Projekt ist es das ich ein infrarot Projekt machen will mit dem seriellen Monitor.. Jedoch sollte man ein und aus schalten können dass die infrarot Signale im monitor angezeigt werden. Jedoch wird trotzdem der Infrarot Code angezeigt. Das Skript sende ich dazu. Ich kenne mich noch nicht so gut aus weshalb ich von einer Website das infrarot Programm teils habe Nr.12 Fernbedienung | Funduino - Kits und Anleitungen für Arduino
/*
* IRremote: IRrecvDemo - demonstrates
receiving IR codes with IRrecv
* An IR detector/demodulator must be
connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
//Infromationen über das ursprüngliche Programm „IrrecvDemo“.
#include <IRremote.h> // Das Programm greift an dieser Stelle auf eine „Library“ zurück. Das erleichtert einem viel Arbeit. Denn das Infrarotlicht wird mit einem Code verschlüsselt gesendet. Um diesen Code selber auszulesen und in passende Werte umzuwandeln, wären sehr viele Zeilen Code erforderlich.
int infrarotcontroll = 0;
int RECV_PIN = 11; // Der Kontakt der am Infrarotsensor die Daten ausgibt, wird mit Pin 11 des Arduinoboards verbunden.
IRrecv irrecv(RECV_PIN); // An dieser Stelle wird ein Objekt definiert, dass den Infrarotsensor an Pin 11 ausliest.
decode_results results; // Dieser Befehl sorgt dafür, dass die Daten, die per Infrarot eingelesen werden unter „results“ abgespeichert werden.
void setup()
{
Serial.begin(9600); //Im Setup wird die Serielle Verbindung gestartet, damit man sich die Empfangenen Daten der Fernbedienung per seriellen Monitor ansehen kann.
pinMode (13, OUTPUT);
irrecv.enableIRIn(); //Dieser Befehl initialisiert den Infrarotempfänger.
}
void loop()
{ //Der loop-Teil fällt durch den Rückgriff auf die „library“ sehr kurz aus.
if (results.value == 16748655){// entspricht auf meiner fernbedinung "EQ"
Serial.println (digitalRead(13));
delay (1000);
}
if (irrecv.decode(&results)) {//Wenn Daten empfangen wurden,
if (infrarotcontroll = 1){
Serial.println(results.value, DEC);
}
int ledsetup = 0;
if (results.value == 16753245){// entspricht auf meiner fernbedinung "CH-"
int infrarotcontroll = 0;
Serial.println ("befehl :int infrarotcontroll = 0: erfolgreich ausgeführt");
Serial.println ("infrarotsignale werden nicht mehr angezeigt");
}
if (results.value == 16769565){// entspricht auf meiner fernbedinung "CH+"
int infrarotcontroll = 1;
Serial.println ("befehl :int infrarotcontroll = 1: erfolgreich ausgeführt");
Serial.println ("infrarotsignale werden angezeigt");
}
if (results.value == 16738455){// entspricht auf meiner fernbedinung "0" und soll die zeit angeben (zeitstempel)
Serial.println( );
}
if (results.value == 16754775){// entspricht auf meiner fernbedinung "+"
digitalWrite (13 , HIGH);
}
if (results.value == 16769055) {// entspricht auf meiner fernbedinung "-"
digitalWrite (13 , LOW);
}
}
irrecv.resume(); //Der nächste Wert soll vom IR-Empfänger eingelesen werden
}
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mein plan war es das der serielle monitor auf Knopfdruck von der Infrarot Fernbedienung reagiert und durch variablen entscheidet (0 und 1) ob die infrarot Signal Codes im monitor angezeigt wird
Und warum baust du dein Projekt nicht entsprechend einem Beispiel aus der verwendeten Library auf ?
Richtet man sich nach den vorgegebenen Beispielen, dann funktioniert es auch. Und so kann man seinen eigenen Sketch auch um Funktionen Stück für Stück erweitern.
Und man entscheidet nicht nach beliebigen Variablen, sondern nach dem empfangenen IR-Code.
Guten Morgen,
Du hast einen falschen Fehler im Code,
Das wird immer wahr sein, da es eine Zuweisung '=' und keine vergleich '==' ist.
Sowas siehst Du als Warnung, wenn Du unter DATEI - VOREINSTELLUNGEN - Ausführliche Ausgabe während [x] Kompilierung und darunter das Auswahlfeld auf ALLE stellt.
Darüber hinaus ist Dein PIN 13 überall mit einer Zahl verankert.
Wenn sich der Pin ändert, dann bist Du im gesamten Code dabei zu suchen, wo das noch zu ändern ist.
Lege am Anfang eine Bezeichnung fest und passe den Pin da hinein. Ändert sich der Pin, brauchst Du nur eine Änderung machen und die gilt Codeweit.
Darüber hinaus hat Arduino eine Variable, die die OnBoardLED immer mitnimmt. Ändert sich das Board - und darauf ist der Pin woanders, ändert sich das automatisch.
Dein ledsetup ist noch ohne Verwedung
#include <IRremote.h> // Das Programm greift an dieser Stelle auf eine „Library“ zurück. Das erleichtert einem viel Arbeit. Denn das Infrarotlicht wird mit einem Code verschlüsselt gesendet. Um diesen Code selber auszulesen und in passende Werte umzuwandeln, wären sehr viele Zeilen Code erforderlich.
bool infrarotcontroll = false;
const byte RECV_PIN = 11; // Der Kontakt der am Infrarotsensor die Daten ausgibt, wird mit Pin 11 des Arduinoboards verbunden.
const byte LED_Pin = LED_BUILTIN;
IRrecv irrecv(RECV_PIN); // An dieser Stelle wird ein Objekt definiert, dass den Infrarotsensor an Pin 11 ausliest.
decode_results results; // Dieser Befehl sorgt dafür, dass die Daten, die per Infrarot eingelesen werden unter „results“ abgespeichert werden.
void setup()
{
Serial.begin(9600); //Im Setup wird die Serielle Verbindung gestartet, damit man sich die Empfangenen Daten der Fernbedienung per seriellen Monitor ansehen kann.
pinMode (LED_Pin, OUTPUT);
irrecv.enableIRIn(); //Dieser Befehl initialisiert den Infrarotempfänger.
}
void loop()
{
//Der loop-Teil fällt durch den Rückgriff auf die „library“ sehr kurz aus.
if (results.value == 16748655) // entspricht auf meiner fernbedinung "EQ"
{
Serial.println (digitalRead(LED_Pin));
delay (1000);
}
if (irrecv.decode(&results)) //Wenn Daten empfangen wurden,
{
if (infrarotcontroll == true)
{
Serial.println(results.value, DEC);
}
int ledsetup = 0;
if (results.value == 16753245) // entspricht auf meiner fernbedinung "CH-"
{
infrarotcontroll = false;
Serial.println ("befehl :int infrarotcontroll = 0: erfolgreich ausgeführt");
Serial.println ("infrarotsignale werden nicht mehr angezeigt");
}
if (results.value == 16769565) // entspricht auf meiner fernbedinung "CH+"
{
infrarotcontroll = true;
Serial.println ("befehl :int infrarotcontroll = 1: erfolgreich ausgeführt");
Serial.println ("infrarotsignale werden angezeigt");
}
if (results.value == 16738455) // entspricht auf meiner fernbedinung "0" und soll die zeit angeben (zeitstempel)
{
Serial.println( );
}
if (results.value == 16754775) // entspricht auf meiner fernbedinung "+"
{
digitalWrite (LED_Pin , HIGH);
}
if (results.value == 16769055) // entspricht auf meiner fernbedinung "-"
{
digitalWrite (LED_Pin , LOW);
}
}
irrecv.resume(); //Der nächste Wert soll vom IR-Empfänger eingelesen werden
}
Bitte.
Dann noch ein Hinweis. Wenn Du Serial.print(ln) schreibst, gewöhne Dir an das F-Makro (runterscrollen) zu benutzen.
Irgendwann schreibt sich das von allein. Serial.println (F("befehl :int infrarotcontroll = 0: erfolgreich ausgeführt"));