Motor mir IR-Fernbedienung steuern

Hallo zusammen, ich probiere einen Motor mit einer IR-Fernbedienung zu steuern. Der Motor soll 3 Geschwindigkeitsstufen haben, sowie bis zum stillstand bremsen.
Wenn ich im loop die Fahrstufen der Reihe nach aufrufe, funktionieren diese, aber sobald ich den IR-Empfänger einbinde funktioniert nichts mehr.

Hier mein Code:

#include <IRremote.h>
int motorPin2=3; // PWM
unsigned long prei;
int i;
bool a = false;
bool b = false;
bool c = false;
bool d = false;  
int irPin = 8; //Pin für den IR Receiver
IRrecv irrecv(irPin); //Objekt initialisieren für die IR Übertragung
decode_results results;

void setup() {
  // put your setup code here, to run once:
pinMode(motorPin2,OUTPUT);
  pinMode(irPin, INPUT);  //Den IR Pin als Eingang deklarieren.
  irrecv.enableIRIn(); //Den IR Pin aktivieren
  Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen.
}



void geschw1 (){
  
if (i<100){ 
     for (i; i<100;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i++;
      prei = millis ();
     }
    
    }}else if (i>100){
      for (i; i>=100;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i--;
      prei = millis ();
     }
      }
     analogWrite (motorPin2, i);
  }
}

void geschw2 (){
  
if (i<160){ 
     for (i; i<160;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i++;
      prei = millis ();
     }
    
    }}else if (i>160){
      for (i; i>=160;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i--;
      prei = millis ();
     }
      }
     analogWrite (motorPin2, i);
  }
}
 void geschw3 (){
  
if (i<255){ 
     for (i; i<255;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i++;
      prei = millis ();
     }
    
    }}else if (i>255){
      for (i; i>=255;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i--;
      prei = millis ();
     }
      }
     analogWrite (motorPin2, i);
  }
}

void bremsen (){for (i; i>=0;){
      if ((millis() - prei) >= 20){
      analogWrite(motorPin2, i);
     i--;
      prei = millis ();
     }
      }
     analogWrite (motorPin2, i);}
  

void loop() {
  static unsigned long resultsvalue = 0; // eine statische Variable für den IR-Code
  if (irrecv.decode(&results)) {
    resultsvalue = results.value;
    Serial.println(results.value, DEC);
    irrecv.resume();
  }
  if (resultsvalue == 3249168798) {a=true; b=false; c=false; d=false;}
  if (resultsvalue == 3249148398) {a=false; b=true; c=false; d=false;}
  if (resultsvalue == 3249181038) {a=false; b=false; c=true; d=false;}
  if (resultsvalue == 3249208323) {a=false; b=false; c=false; d=true;}

    if (a == true) geschw1();
    if (b == true) geschw2();
    if (c == true) geschw3();
    if (d == true) bremsen();
}

Das Problem ist folgende Zeile:

irrecv.enableIRIn(); //Den IR Pin aktivieren 

sobald ich das hinzufüge geht es nicht mehr.

Danke für eure Hilfe!

Damit wird ein Timer auf den 50µs Takt für den Empfang gesetzt. Welcher Timer dafür benutzt wird steht in der Bibliothek, je nach Controller Typ. Dieser Timer beeinflußt dann die Funktion seiner Ausgänge, und einer davon könnte Dein motorPin sein. Probiere mal andere motorPins.

Das sehe ich als unnötiges doppelt gemoppelt.
Mit einer einfachen switch/case Abfrage ist das sicher besser zu lösen.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.