DC Motor in beide Richtungen drehen mit IR remoter

Hallo ich habe ein Programm geschrieben wo sich der Motor in beide Richtungen dreht. Was auch funktioniert. Wenn ich nun auf den 1. Knopf vom IR remoter klicke dreht sich der Motor im Uhrzeiger sin. Aber wenn ich auf den 2. Knopf drücke damit sich der Motor gegen den Uhrzeiger sin dreht reagiert das Programm nicht und der Motor dreht sich weiter im Uhrzeiger sin.

Hier mein Code:

#include "IRremote.h"

int motorPin1 = 2;
int motorPin2 = 3;

int receiver = 11;

bool i = false;

IRrecv irrecv(receiver);
decode_results results;


void setup() {
  pinMode(motorPin1,OUTPUT);
  pinMode(motorPin2,OUTPUT);

  irrecv.enableIRIn(); // Start the receiver

}

void loop() {
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    irrecv.resume(); // receive the next value
  }  

    if(results.value == 0xFF629D){
       digitalWrite(motorPin1,HIGH);   // Motor Vor
       digitalWrite(motorPin2,LOW);
    }
    else if(results.value == 0xFFA857){
      digitalWrite(motorPin1,LOW);   // Motor rückwärts
      digitalWrite(motorPin2,HIGH);
    }
 
}

Hoffe ihr könnt mir helfen.
Vielen Dank im voraus

Dann prüfe doch mal mit dem serial Monitor welcher IR-Code gesendet bzw. empfangen wird.

Ich habe mit dem Serial Monitor geprüft was raus kommt und da kam immer das selbe raus und es änderte sich auch nichts. Habt ihr eine idee wie ich das ändern kann?

Hans_M:
Ich habe mit dem Serial Monitor geprüft was raus kommt und da kam immer das selbe raus und es änderte sich auch nichts. Habt ihr eine idee wie ich das ändern kann?

Deine Auskunft ist ja sehr erschöpfend.
Was heißt denn "kam immer das selbe raus" ?
Da können wir nichts mit anfangen.
Oder sollen wir raten ?

 if(results.value == 0xFF629D){
       digitalWrite(motorPin1,HIGH);   // Motor Vor
       digitalWrite(motorPin2,LOW);

       Serial.println("VOL+");
    }
    else if(results.value == 0xFFA857){
      digitalWrite(motorPin1,LOW);   // Motor rückwärts
      digitalWrite(motorPin2,HIGH);

      Serial.println("VOL-");
    }

Das ist mein neuer Code und dort kommt immer "VOL+" raus und anders herum auch, also "VOL-".

Serial Monitor:

Signal wird empfangen
VOL+
VOL+
VOL+
VOL+
VOL+
VOL+
VOL+
VOL+

bis ich das Programm resette

Dann setze doch mal “Switch/Case” ein.

0xFFA857 wird wohl nie gesendet.

HotSystems:
Dann prüfe doch mal mit dem serial Monitor welcher IR-Code gesendet bzw. empfangen wird.

michael_x:
0xFFA857 wird wohl nie gesendet.

Doch wenn ich am Anfang den Knopf betätige dann schon, aber dann wird der andere nicht gesendet.

Könnte es sein, dass Deine Fernbedienung einen Defekt hat?

Gruß Tommy

Tommy56:
Könnte es sein, dass Deine Fernbedienung einen Defekt hat?

Gruß Tommy

Muss ich mal testen

Ich behaupte mal ganz dreist, dass jeweils das irrecv.resume(); fehlt.

Das Stichwort war gut. Es ist zwar drin aber muss das nicht nach die Auswertung ans Ende vom Loop?

Gruß Tommy

Tommy56:
Das Stichwort war gut. Es ist zwar drin aber muss das nicht nach die Auswertung ans Ende vom Loop?

Ich hatte es gar nicht geshen, erst auf deinen Hinweis hin. Allerdings finde ich den Programmierstil ungünstig. Ich würde immer erst die Aktion ablaufen lassen bzw. ein entsprechendes Flag setzen und erst im Anschluss den Empfang eines neuen IR-Codes freigeben. Meintest du sicher mit deinem letzten Satz, oder?

Ja, so hatte ich es gemeint.

Gruß Tommy