Arduino 11, ovládání točny - krokový motor

Použité komponenty:
1 x Arduino Pro Uno (Nano)
1 x IR (infrared) modul 
1 x odpor 10k pro spínače
4 x spínač (vypínač)
1 x driver pro krokový motor s IO LN2003
1 x krokový motor bipolární - 5V


Program:

Stav klidu - nic se neděje
Ver. 1
Sepnutí spínače A (1) - motor se točí do jednoho směru plnou rychlostí
Sepnutí spínače B (2) - motor se točí do druhého směru plnou rychlostí
Sepnutí spínače C (3) - motor se točí do jednoho směru poloviční rychlostí
Sepnutí spínače D (4) - motor se točí do druhého směru poloviční rychlostí
(Rychlosti je možné individuálně nastavit)

Ver. 2
Sepnutí spínače A (1) nebo B (2) - motor se točí v daném směru do místa polohy IR snímače, kde zastaví
Sepnutí spínače C (3) - motor se točí do jednoho směru poloviční rychlostí - ignoruje IR snímač
Sepnutí spínače D (4) - motor se točí do druhého směru poloviční rychlostí - ignoruje IR snímač
(Rychlosti je možné individuálně nastavit)

Ver. 3 a dále se připravuje - V plánu je kompletní ovládání točny s možností tlačítkové volby výjezdové koleje točny a směru otočení. Vylepšení a zpřesnění snímače polohy. (Non-stop točení bude zachováno jako bonus navíc pro předvádění). 

Instalaci do točny časem doplním.

Funkce viz. video:
Ver.1

Ver.2

Program:
int button_1 = 1;
int button_2 = 2;
int button_3 = 3;
int button_4 = 4;
int motorPin1 = 8;          
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;

int motor_Speed1 = 1;
int motor_Speed2 = 8;


  void setup() {
  pinMode(button_1, INPUT);
  pinMode(button_2, INPUT);
  pinMode(button_3, INPUT);
  pinMode(button_4, INPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop() {
  
{
  if (digitalRead(button_1) == HIGH)
  {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed1);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed1);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed1);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(motor_Speed1);
  }
  if (digitalRead(button_2) == HIGH)
  {
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(motor_Speed1);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed1);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed1);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed1);
  }
   if (digitalRead(button_3) == HIGH)
  {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(motor_Speed2);
  }
   if (digitalRead(button_4) == HIGH)
  {
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(motor_Speed2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed2);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed2);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(motor_Speed2);
  }
}
}