ich habe einen Arduino Nano 3xx P eine IR Empfängerdiode, zugehoerige Fernbedienung.
Ich bin was das programmieren angeht ein absoluter Anfänger, habe mir aber auf YT einige Videos angesehen und auch schon ein paar Scetche abgetippt und ausprobiert, das hat soweit auch funktioniert.
nun habe ich den unten stehenden Code geschrieben für die Fernbedienung. Die Tasten 1,2,4 und 0 funktionieren wie gewuenscht, aber das Lauflicht welches mit Taste 3 gestartet werden soll funktioniert nicht.
könnte mir jemand bitte erklaeren was ich hier falsch mache und mir helfen damit ich es zum laufen bekomme.
hier mein code
#include <IRremote.hpp>
int eingangspin = 11;
int LEDred = 10;
int LEDgreen = 9;
int LED = 6;
int LED1 = 7;
int WertTaste1 = 0;
int WertTaste2 = 0;
int Taste3 = 0;
int Taste4 = 0;
int StatusLEDred = HIGH;
int StatusLEDgreen = HIGH;
int StatusLED = HIGH;
int StatusLED1 = HIGH;
unsigned long previousMillisLEDred = 0;
unsigned long previousMillisLEDgreen = 0;
const long Intervalred = 1000;
const long Intervalgreen = 250;
int LEDrund [3] = {3, 4, 5};
int counter = 0;
unsigned long previousMillis = 0;
const long intervall = 75;
void setup() {
{
for (int i = 0; i < 3; i++)
pinMode (LEDrund , OUTPUT);
}
Serial.begin(9600);
IrReceiver.begin (eingangspin);
pinMode (LEDred, OUTPUT);
pinMode (LEDgreen, OUTPUT);
pinMode (LED, OUTPUT);
pinMode (LED1, OUTPUT);
}
void loop() {
if (IrReceiver.decode()) {
IrReceiver.printIRResultShort (&Serial);
switch (IrReceiver.decodedIRData.command) {
case 0x45:
if (WertTaste1 == 0) {
WertTaste1 = 1;
Serial.print("Eingeschaltet");
Serial.print("WertTaste1");
}
else {
Serial.print("Ausgeschaltet");
WertTaste1 = 0;
} break;
case 0x46:
if (WertTaste2 == 0) {
WertTaste2 = 1;
Serial.print ("Eingeschaltet");
Serial.print ("WertTaste2");
}
else {
Serial.print ("Ausgeschaltet");
WertTaste2 = 0;
} break;
case 0x47:
if (Taste3 == 0) {
Taste3 = 1;
}
else {
Taste3 = 0;
} break;
case 0x44:
if (Taste4 == 0) {
Taste4 = 1;
}
else {
Taste4 = 0;
}
default:
break;
}
delay (200);
IrReceiver.resume();
}
if (WertTaste1 == 1) {
loop_red ();
}
else {
digitalWrite (LEDred, HIGH);
}
if (WertTaste2 == 1) {
loop_green ();
}
else {
digitalWrite (LEDgreen, HIGH);
}
if (Taste3 == 1) {
loop_rund ();
}
else {
digitalWrite (LEDrund, HIGH);
}
if (Taste4 == 1) {
digitalWrite(LED, LOW);
digitalWrite (LED1, LOW);
}
else {
digitalWrite (LED, HIGH);
digitalWrite (LED1, HIGH);
}
if (IrReceiver.decodedIRData.command == 0x19) {
WertTaste1 = 0;
WertTaste2 = 0;
Taste3 = 0;
Taste4 = 0;
}
}
void loop_red() {
unsigned long currentMillisLEDred = millis();
if (currentMillisLEDred - previousMillisLEDred >= Intervalred) {
previousMillisLEDred = currentMillisLEDred;
if (StatusLEDred == HIGH) {
StatusLEDred = LOW;
}
else {
StatusLEDred = HIGH;
}
digitalWrite (LEDred, StatusLEDred);
}
}
void loop_green () {
unsigned long currentMillisLEDgreen = millis ();
if (currentMillisLEDgreen - previousMillisLEDgreen >= Intervalgreen) {
previousMillisLEDgreen = currentMillisLEDgreen;
if (StatusLEDgreen == HIGH) {
StatusLEDgreen = LOW;
}
else {
StatusLEDgreen = HIGH;
}
digitalWrite (LEDgreen, StatusLEDgreen);
}
}
void loop_rund () {
unsigned long currentMillis = millis ();
if (currentMillis - previousMillis >= intervall) {
previousMillis = currentMillis;
if (counter == 0) {
digitalWrite(LEDrund[2], HIGH);
}
else {
digitalWrite(LEDrund[counter - 1], HIGH);
}
digitalWrite(LEDrund[counter], LOW);
counter = counter + 1;
if (counter > 3) {
counter = 0;
}
}
}
Warum verwendest du nicht einen dafür geeigneten IR-Empfänger, statt der Diode. Z.B. den TSOP 31238. Damit wirst du sicher dein Problem lösen.
Und das die IR-Fernbedienung nur einzelne Ziffern ausgibt, kann ich mir auch nicht vorstellen.
Das sagt nix....poste doch bitte mal einen Link dazu. Da kann man mehr erkennen.
Edit:
Noch ein Tipp, teste deine ersten Sketch mit einem Beispiel aus der Library IRRemote. Wenn es funktioniert, kannst du den mit deinen spezielle Funktionen erweitern.
Aber bedenke, die Codezahlen aus der Fernbedienung sind def. mehrstellig.
Ok, das mit dem Hex-Code habe ich übersehen.
Hast du denn mal die Funktion "loop_rund" mal über eine andere Taste gestartet ?
Läuft diese Funktion fehlerfrei ?
Oder liegt es an der unbersichtlichen Verschachtelung der if-Abfrage und Switch / Case.
Da steige ich aktuell nicht durch. Da fehlen Kommenttare, was passieren soll.
Für die Fernbedienung gibt es eine Lib was dir direkt die 17 Code anzeigt , must nur anpassen an dein Sketch
Habe gestern gesucht nach IR für ESP und habe die gefunden.
Must aber den Beispiel für IRcontroller_17 starten, die Lib ist so einfach das du solltest keine Probleme haben die in deinem Sketch einbinden. Wen doch fragen
Noch was die Lib ist nur für die einfachen Fernbedienungen für Arduino
Unterstützt nur die beide bei anderen kommt "WARNING: undefined command:"