Schrittmotor 28BYJ-48 mit IR Fernbedieung steuern

Guten Tag zusammen,

seit einiger Zeit bin ich mit einem für mich etwas größerem Projekt beschäftigt:
Ich möchte den Schrittmotor 28BYJ-48 (in der 5V Variante) zusammen mit dem ULN2003 Treibermodul per IR Fernbedienung mithilfe eines Arduinos steuern.#

Dabei sollte sich der Schrittmotor

  1. im Uhrzeigersinn drehen, wenn ich einen bestimmten Knopf (nennen wir ihn A) der Fernbedienung einmal gedrückt habe, und erst wieder stehen bleiben, wenn ich einen beliebigen anderen Knopf drücke.

  2. gegen den Uhrzeigersinn drehen, wenn ich einen anderen bestimmten Knopf (nennen wir ihn B) der Fernbedienung einmal gedrückt habe, und auch erst wieder stehen bleiben, wenn ich einen beliebigen anderen Knopf drücke.

Ich habe dies bereits mit zwei unterschiedlich farbigen LEDs getestet, wobei es funktioniert hat. (Eine rote LED stand für die Drehung im Uhrzeigersinn. Eine grüne LED stand für die Drehung gegen den Uhrzeigersinn.)

Der Sketch sieht wie folgt aus:

#include <IRremote.h>
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN)
decode_results results;

void setup() {
   pinMode(13, OUTPUT);
   pinMode(12, OUTPUT);
   Serial.begin(9600); 
   irrecv.enableIRIn();
   }

void loop() {
   if (irrecv.decode(&results)) {    
     Serial.println(results.value, DEC); 
      while (results.value == 10463599 || results.value == 2568141210) {
          digitalWrite(13, HIGH);
          digitalWrite(12, LOW);
         if (irrecv.decode(&results)) {    
          Serial.println(results.value, DEC);
          irrecv.resume(); 
        }
      }
      while (results.value == 3684511895 || results.value == 3189060206) {
          digitalWrite(12, HIGH);
          digitalWrite(13, LOW);
         if (irrecv.decode(&results)) {
          Serial.println(results.value, DEC); 
          irrecv.resume(); 
        }
      }
      while (results.value != 2568141210 && results.value != 10463599 && results.value != 3684511895 && results.value != 3189060206) {
          digitalWrite(13, LOW);
          digitalWrite(12, LOW);
         if (irrecv.decode(&results)) {    
          Serial.println(results.value, DEC); 
          irrecv.resume(); 
        }
      }
  }
}

An Pin 12 ist dabei die grüne LED angeschlossen und an Pin 13 die rote.
Da jede Taste der Fernbedienung zwei "Nummerncodes" besitzt, stehen immer jeweils 2 oder vier "Nummerncodes" in den if-Funktionen.

Nun zu meinem Problem:

Sobald ich in der Folge der if-Funktion anstelle der Befehle für die LEDs Befehle für einen Schrittmotor einfüge, dreht sich dieser nicht, sondern "zittert" maximal. Meine Frage wäre nun, wie ich mein oben genanntes Ziel erreichen könnte.
Der Schrittmotor funktioniert ansonsten einwandfrei. Daran kann es somit nicht liegen.

Viele Grüße und besten Dank für eure hoffentlich zahlreichen Antworten

Noah

Wo ist in diesem Sketch die Schrittmotoransteuerung?

Grüße Uwe

Hi

Ich befürchte bei einer händische Ansteuerung und Pegelwechsel bei jedem loop()-Durchlauf wird Das einfach zu schnell :).
Wenn Du die Umschaltung hinter ein

if (millis()-lasttime>=10){
   lasttime=millis();
   ... Deine Pin-Umschaltung
}

packst, bekommt dieser Stepper nur alls 10ms einen Takt - also 100 in der Sekunde - um 500 ist das Maximum - Das sollte der Stepper schaffen - allerdings ggf. nur ohne Last.

Hast Du Dir Mal die AccelStepper angeschaut?
Da musst Du Dich um die Pin-Reihenfolge, Anfahrt- und Bremsrampen nicht kümmern.
Einzig muß der Stepper möglichst schnell aktualisiert werden, damit die Lib Diesen 'im richtigen Moment' einen Schritt weiter stupsen kann.
Geschwindigkeit wird bei Dir, so denke ich, kein Problem sein.

MfG

uwefed:
Wo ist in diesem Sketch die Schrittmotoransteuerung?

Grüße Uwe

Das ist nur der Sketch, der zwei LEDs ansteuert. Eine grüne LED an Pin 12 steht für die Drehung des Schrittmotors gegen den Uhrzeigersinn und eine rote LED an Pin 13 steht für die Drehung des Schrittmotors im Uhrzeigersinn.
Mein Problem liegt ja gerade darin, die LED - Ansteuerung durch eine Schrittmotorsteuerung zu ersetzen (siehe oben).

Hat Du schon versucht nur den Motor zu steuern?
Grüße Uwe

(hoffentlich blamiere ich mich jetzt nicht)

Hallo Noah, weisst du eigentlich wie ein Schrittmotor funktioniert?
Du musst die Wicklungen immer abwechselnd bestromen. Der Treiber ist nur ein Verstärker und übernimmt das nicht für dich. Hier ein Video (engl.) dazu: 28BYJ-48 stepper motor and ULN2003 Arduino (Quick tutorial for beginners) - YouTube

Um durch die Massenträgheit keine Schritte zu verlieren, wird mit einer Rampe angefahren und abgebremst. Die Lib, die Postmaster dir vorschlägt, macht den Pinwechsel und die Rampe für dich.

uwefed:
Hat Du schon versucht nur den Motor zu steuern?
Grüße Uwe

Ja. Ein Sketch, dem ich zwei Taster hinzugefügt habe und der problemlos funktioniert, ist der folgende:

// Definition der PINs für den Motor
int motor_pin_1 = 8;
int motor_pin_2 = 9;
int motor_pin_3 = 10;
int motor_pin_4 = 11;
int schritte = 0;

int taster1 = 5;
int taster2 = 7;
int taster1status = 0;
int taster2status = 0;

// Mit false/true kann hier ein Richtungswechsel erfolgen


void setup() {
  pinMode(motor_pin_1, OUTPUT);
  pinMode(motor_pin_2, OUTPUT);
  pinMode(motor_pin_3, OUTPUT);
  pinMode(motor_pin_4, OUTPUT);

  pinMode(taster1, INPUT);
  pinMode(taster2, INPUT);
}


void loop() {
  taster1status = digitalRead(taster1);
  taster2status = digitalRead(taster2);
  // Durchlauf für die Umdrehungen (Vorwärts 0-1-2-3-4-5-6-7)
  // Jeden PIN einzeln ansteuern
  switch (schritte) {
    case 0:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    case 1:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
    case 2:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 3:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 4:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 5:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 6:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 7:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    default:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
  }
  
  
  if (taster1status == HIGH) {
    schritte++;
    }
  
  if (taster2status == HIGH) {
    schritte--;
    }
  
  if (schritte > 7) {
    schritte = 0;
  }
  if (schritte < 0) {
    schritte = 7;
  }
  delay(1);

}

Der Schrittmotor dreht dabei in eine eine Richtung, solange ich den einen Taster gedrückt halt, und in die andere, solange ich den anderen Taster gedrückt halte. Jetzt müsste ich nur die normalen Taster durch zwei auf der IR Fernbedienung ersetzen.

OtmarK:
(hoffentlich blamiere ich mich jetzt nicht)

Hallo Noah, weisst du eigentlich wie ein Schrittmotor funktioniert?
Du musst die Wicklungen immer abwechselnd bestromen. Der Treiber ist nur ein Verstärker und übernimmt das nicht für dich. Hier ein Video (engl.) dazu: https://www.youtube.com/watch?v=avrdDZD7qEQ

Um durch die Massenträgheit keine Schritte zu verlieren, wird mit einer Rampe angefahren und abgebremst. Die Lib, die Postmaster dir vorschlägt, macht den Pinwechsel und die Rampe für dich.

Ja, ich weiß, wie ein Schrittmotor funktioniert. :slight_smile:

Kann ich den Schrittmotor mit der IR Fernbedienung denn nicht auch ohne die library zum Laufen bringen?

Hi

Naja - Dein Sketch sieht Mal so aus, daß Dein Stepper damit laufen müsste - da Du Ähnliches schreibst: Ja, man kann einen Stepper auch ganz ohne Lib ansteuert - wusstest Du aber wohl schon.

Dieses Sketch packst Du nun auf Seite, suchst Dir einen IR-Empfänger-Sketch und probierst Diesen aus.
Wenn Dieser ebenfalls sauber läuft, verheiratest Du Beide.

Kann sein, daß der IR-Kram den anderen Ablauf behindert - Das wirst Du aber weit vor uns sehen dürfen.

MfG

postmaster-ino:
Hi

Naja - Dein Sketch sieht Mal so aus, daß Dein Stepper damit laufen müsste - da Du Ähnliches schreibst: Ja, man kann einen Stepper auch ganz ohne Lib ansteuert - wusstest Du aber wohl schon.

Dieses Sketch packst Du nun auf Seite, suchst Dir einen IR-Empfänger-Sketch und probierst Diesen aus.
Wenn Dieser ebenfalls sauber läuft, verheiratest Du Beide.

Kann sein, daß der IR-Kram den anderen Ablauf behindert - Das wirst Du aber weit vor uns sehen dürfen.

MfG

Genau das ist mein Problem - das "verheiraten".

Hier ist der Sketch, mit dem ich 2 LEDs per IR Fernbedienung an- und ausschalten kann. Der "verheiratete" Sketch zeigt zwar keinerlei Fehler an, der Schrittmotor zuckt dann aber nur 1 Mal, wenn ich eine Taste drücke:

#include <IRremote.h>
int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
   pinMode(13, OUTPUT);
   pinMode(12, OUTPUT);
   Serial.begin(9600); 
   irrecv.enableIRIn();
   }

void loop() {
   if (irrecv.decode(&results)) {    
     Serial.println(results.value, DEC); 
      while (results.value == 10463599 || results.value == 2568141210) {
          digitalWrite(13, HIGH);
          digitalWrite(12, LOW);
         if (irrecv.decode(&results)) {    
          Serial.println(results.value, DEC);
          irrecv.resume(); 
        }
      }
      while (results.value == 3684511895 || results.value == 3189060206) {
          digitalWrite(12, HIGH);
          digitalWrite(13, LOW);
         if (irrecv.decode(&results)) {
          Serial.println(results.value, DEC); 
          irrecv.resume(); 
        }
      }
      while (results.value != 2568141210 && results.value != 10463599 && results.value != 3684511895 && results.value != 3189060206) {
          digitalWrite(13, LOW);
          digitalWrite(12, LOW);
         if (irrecv.decode(&results)) {    
          Serial.println(results.value, DEC); 
          irrecv.resume(); 
        }
      }
  }
}

Wie kann ich die zwei Sketches denn RICHTIG und FUNKTIONIEREND "verheiraten"?

Hi

Ok - Das ist der LED-Sketch.
Wie schaut Dein 'Motor zuckt nur 1 Mal'-Sketch aus?

Pflaster jede Menge Serial.println("Punkt xyz");
in den Sketch, damit Du siehst, wo der Arduino falsch abbiegt.
Lasse Dir anzeigen, WAS der IR-Empfänger empfangen hat - vll. hast Du nur einen Zahlendreher und Dein LED-Beispiel tut nur, weil Da eben nicht durch verschiedene Status (jupp, auch die Mehrzahl) gegangen werden muß, sondern eh die LED ohne expliziten AUS-Befehl an bleibt.

MfG

Hallo Noah, du musst nicht alles direkt in der loop() verwursteln. Versuche doch mal deinen Code aufzuteilen (zu strukturieren).

Mach dir doch zwei globale Variable die die Fernbedienung setzt und der Motor abfrägt.
   bool motor_links = false;
   bool motor_rechts = false;

Dann machst du jeweils eine setup() und loop() für FB und Motor
   setup()
   {
      Serielle Schnittstelle....
      setup_FB();
      setup_Motor();
   }

   loop()
   {
      loop_FB();                  
      // hier kannst du den Zustand der Flags mitloggen, dann weisst du ob FB oder 
      //   Motor Probleme macht
      loop_Motor();              
   }

   void setup_FB()
   {
      // da packst du das Setup der FB rein
      // wenn eine Taste betätigt wird setzt du das entsprechende Flag (motor_links oder motor_rechts)
   }

   void setup_Motor()
   {
      // und das für den Motor
   }

   void loop_FB()
   {
      // wenn eine Taste betätigt wird setzt du das entsprechende Flag (motor_links oder motor_rechts)
   }

   void loop_Motor()
   {
      // hier kopierst du den code von deinem Motorsketch rein
      // statt die Taste einzulesen frägst du die Flags ab
   }

Wenn das funktioniert und dir das Konzept gefällt, kannst du versuchen eine FB- und eine Motorklasse zu machen...

postmaster-ino:
Hi

Ok - Das ist der LED-Sketch.
Wie schaut Dein 'Motor zuckt nur 1 Mal'-Sketch aus?

Pflaster jede Menge Serial.println("Punkt xyz");
in den Sketch, damit Du siehst, wo der Arduino falsch abbiegt.
Lasse Dir anzeigen, WAS der IR-Empfänger empfangen hat - vll. hast Du nur einen Zahlendreher und Dein LED-Beispiel tut nur, weil Da eben nicht durch verschiedene Status (jupp, auch die Mehrzahl) gegangen werden muß, sondern eh die LED ohne expliziten AUS-Befehl an bleibt.

MfG

Das ist der Sketch, bei dem der Schrittmotor zuckt, solange ich entweder Taste 1 oder Taste 2 der Fernbedienung gedrückt halte (siehe Kommentare im Sketch, was Taste 1 bzw. 2 ist).

#include <IRremote.h>

int RECV_PIN = 3;

int motor_pin_1 = 8;
int motor_pin_2 = 9;
int motor_pin_3 = 10;
int motor_pin_4 = 11;
int schritte = 0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  pinMode(motor_pin_1, OUTPUT);
  pinMode(motor_pin_2, OUTPUT);
  pinMode(motor_pin_3, OUTPUT);
  pinMode(motor_pin_4, OUTPUT);

  Serial.begin(9600);

  irrecv.enableIRIn();

}

void loop() {
  
  switch (schritte) {
    case 0:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    case 1:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
    case 2:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 3:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 4:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 5:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 6:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 7:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    default:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
  }
  
  
  if (irrecv.decode(&results)) {

Serial.println(results.value, DEC);

if (results.value == 10463599 || results.value == 2568141210)   //Wenn der Infrarotempfänger die Zahl 
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)

{schritte++;}   //soll die LED an gehen.

if (results.value == 3684511895 || results.value == 3189060206)   //Wenn der Infrarotempfänger die Zahl 
//„16718055“ ausgelesen hat (Entsprechend der Taste“2“ der Fernbedienung), 

{schritte--;}  //soll die LED aus gehen.

irrecv.resume();

if (schritte > 7) {
    schritte = 0;
  }
  if (schritte < 0) {
    schritte = 7;
  }
  delay(1);

}

  

}

Ich vermute, der Schrittmotor macht PRO Befehl, den der IR Empfänger bekommt, einen Schritt. Aber wie kann ich das Problem lösen?

OtmarK:
Hallo Noah, du musst nicht alles direkt in der loop() verwursteln. Versuche doch mal deinen Code aufzuteilen (zu strukturieren).

Mach dir doch zwei globale Variable die die Fernbedienung setzt und der Motor abfrägt.

bool motor_links = false;
  bool motor_rechts = false;

Dann machst du jeweils eine setup() und loop() für FB und Motor
  setup()
  {
      Serielle Schnittstelle....
      setup_FB();
      setup_Motor();
  }

loop()
  {
      loop_FB();                 
      // hier kannst du den Zustand der Flags mitloggen, dann weisst du ob FB oder
      //  Motor Probleme macht
      loop_Motor();             
  }

void setup_FB()
  {
      // da packst du das Setup der FB rein
      // wenn eine Taste betätigt wird setzt du das entsprechende Flag (motor_links oder motor_rechts)
  }

void setup_Motor()
  {
      // und das für den Motor
  }

void loop_FB()
  {
      // wenn eine Taste betätigt wird setzt du das entsprechende Flag (motor_links oder motor_rechts)
  }

void loop_Motor()
  {
      // hier kopierst du den code von deinem Motorsketch rein
      // statt die Taste einzulesen frägst du die Flags ab
  }




Wenn das funktioniert und dir das Konzept gefällt, kannst du versuchen eine FB- und eine Motorklasse zu machen...

Ehrlicher Weise verstehe ich nicht genau, wie bzw. was ich da(s) machen soll...

Wenn du mir einen großen Gefallen machen willst, würde ich mich sehr darüber freuen, wenn du deinen Plan mit meinen Sketches umsetzen würdest. (Ich glaube, dass das auch weniger kompliziert wäre, als wenn du mir alles erklären würdest...)

Was meinst du dazu? :wink:

Viele Grüße
Noah

Maker1212:
Ich vermute, der Schrittmotor macht PRO Befehl, den der IR Empfänger bekommt, einen Schritt. Aber wie kann ich das Problem lösen?

Ich weiß nicht, wie Dene Fernbedienung tickt, aber meine senden beim Drücken einer Taste den zugehörigen Code und danach den Code für Wiederholung. Wenn der Motor weiterdrehen soll, benötigst Du einen Merker.

Im Programm, in dem Du LEDs schaltest, hast Du Merker - die LED-Ausgänge. Jetzt brauchst Du nur noch: Wenn LED an, dann drehe den Motor! Und ja, digitalRead funktioniert auch mit Ausgängen. Alternativ geht auch eine Variable bool statusLED1; und digitalWrite(pinLED1, statusLED1); und if(statusLED1) { Drehe Motor }

Eigentlich das gleiche , das agmue schon schrieb, nur halt mit zwei Variablen.
Ich versuche mal den Code aus den Posts zusammen zu pfrimeln:

An Pin 12 und 13 können deine LEDs angeschlossen werden, an Pins 8 bis 11 muss dein Motor (wie schon in deinen Skeches)

Im loop_Motor hab ich das delay(1) auf delay(50) geändert. Da musst du vielleicht noch etwas rumspielen

(Ich müsste noch vor setup() Prototypen reinsetzen, aber die Arduino-IDE braucht das, glaube ich, nicht)

Ich hoffe mal, dass keine gröberen Schnitzer drin sind. Probiers einfach mal aus.

Gruß,
Otmar

#include <IRremote.h>

int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN)
decode_results results;

bool motor_links = false;
bool motor_rechts = false;

int motor_pin_1 = 8;
int motor_pin_2 = 9;
int motor_pin_3 = 10;
int motor_pin_4 = 11;
int schritte = 0;

setup()
{
    Serial.begin(9600); 
    delay(50);
    setup_FB();
    setup_Motor();
}

loop()
{
    loop_FB();          

	// ich mach das mal vor loop_Motor() falls in loop_Motor() die Variablen aus irgendwelchen
        // Gründen geändert werden...
	if( motor_rechts && !motor_links)
		Serial.println( "Motor dreht rechts" );
	if( !motor_rechts && motor_links)
		Serial.println( "Motor dreht links" );
	if( motor_rechts && motor_links)
		Serial.println( "Ups, beide Tasten. Motor steht" );
	if( !motor_rechts && !motor_links)
		Serial.println( "Motor steht und ist stromlos" );

    loop_Motor();             
}

void setup_FB()
{
    pinMode(13, OUTPUT);
    pinMode(12, OUTPUT);
    irrecv.enableIRIn();
}

void setup_Motor()
{
	pinMode(motor_pin_1, OUTPUT);
	pinMode(motor_pin_2, OUTPUT);
	pinMode(motor_pin_3, OUTPUT);
	pinMode(motor_pin_4, OUTPUT);
}

void loop_FB()
{
	if (irrecv.decode(&results)) 
	{   
		Serial.println(results.value, DEC);
		while (results.value == 10463599 || results.value == 2568141210) 
		{
			digitalWrite(13, HIGH);
			digitalWrite(12, LOW);
			motor_links = true;
			motor_rechts = false;
			
			if (irrecv.decode(&results)) 
			{   
				Serial.println(results.value, DEC);
				irrecv.resume();
			}
		}
		
		while( results.value == 3684511895 || results.value == 3189060206) 
		{
			digitalWrite(12, HIGH);
			digitalWrite(13, LOW);
			motor_links = false;
			motor_rechts = true;

			if (irrecv.decode(&results)) 
			{
				Serial.println(results.value, DEC);
				irrecv.resume();
			}
		}
		while (results.value != 2568141210 && results.value != 10463599 && results.value != 3684511895 && results.value != 3189060206) 
		{
			digitalWrite(13, LOW);
			digitalWrite(12, LOW);
			motor_links = false;
			motor_rechts = false;

			if (irrecv.decode(&results)) 
			{   
				Serial.println(results.value, DEC);
				irrecv.resume();
			}
		}
	}
}

void loop_Motor()
{
  // Durchlauf für die Umdrehungen (Vorwärts 0-1-2-3-4-5-6-7)
  // Jeden PIN einzeln ansteuern
  switch (schritte) 
  {
    case 0:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    case 1:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
    case 2:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 3:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 4:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 5:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 6:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
    case 7:
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
    default:
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
  }
  
  if (motor_rechts == true) {
    schritte++;
    }
 
  if (motor_links == true) {
    schritte--;
    }
 
  if (schritte > 7) {
    schritte = 0;
  }
  if (schritte < 0) {
    schritte = 7;
  }
  //delay(1);
  delay(50);
}