Шаговый двигатель Nema34 и три датчика

Всем большое спасибо за участие в теме, особенно "Дим-мычъ". Код подредактировал - Все работает как надо.

//для управления двигателем
const uint8_t pin_ENA = 2;                // Вывод 2 Arduino подключённый к входу драйвера ENA+.
const uint8_t pin_DIR = 6;                // Вывод 3 Arduino подключённый к входу драйвера DIR+.
const uint8_t pin_PUL = 4;                // Вывод 4 Arduino подключённый к входу драйвера PUL+.
                                          // Вывод GND Arduino соединён с входами драйвера ENA-, DIR-, PUL-.

const uint8_t pin_Datchik_1 = 8;         // Вывод 8 Arduino подключённый к переключателю (емкостному датчику1) 
const uint8_t pin_Datchik_2 = 10;        // Вывод 10 Arduino подключённый к переключателю (емкостному датчику2) 
const uint8_t pin_Datchik_3 = 12;        // Вывод 12 Arduino подключённый к переключателю (оптическому датчику)

int spd = A0;                          // потенциометр - регулирует скорость вращения двигателя
                          
int t;                                 // Определяем частоту следования микрошагов
             
void start()
{
   
  digitalWrite( pin_PUL, 1 );            // Устанавливаем на выводе PUL состояние логической «1»
  delayMicroseconds(t);                  // Выполняем задержку микрошага двигателя
  digitalWrite( pin_PUL, 0 );            // Устанавливаем на выводе PUL состояние логического «0»
  delayMicroseconds(t);                  // Выполняем задержку микрошага двигателя
}

void prymo()
{
  // Устанавливаем движение вала в пряммом направлении:
  digitalWrite( pin_ENA, 0 );            // Разрешаем работу двигателя
  delayMicroseconds(5);                  // Выполняем задержку
  digitalWrite( pin_DIR, 0 );            // Указываем валу вижение в прямом направлении
  delayMicroseconds(5);                  // Выполняем задержку
}

void obratno()
{
  // Устанавливаем движение вала в обратном направлении:
  digitalWrite( pin_ENA, 0 );            // Разрешаем работу двигателя
  delayMicroseconds(5);                  // Выполняем задержку
  digitalWrite( pin_DIR, 1 );            // Указываем валу вижение в обратном направлении
  delayMicroseconds(5);                  // Выполняем задержку
}

void skorost()
{
  //Функция  map пропорционально переносит значение (value) из текущего диапазона 
  //значений (fromLow .. fromHigh) в новый диапазон (toLow .. toHigh), заданный параметрами.
  //map(value, fromLow, fromHigh, toLow, toHigh)
  
 t = map((analogRead(spd)),0,1023,1,20); 
}


                                        
void setup()                              // void setup() – функция, которая выполняется единожды, при загрузке программы  
{                              
     pinMode( pin_ENA, OUTPUT );          // Конфигурируем вывод 2 Arduino как выход
     pinMode( pin_DIR, OUTPUT );          // Конфигурируем вывод 3 Arduino как выход
     pinMode( pin_PUL, OUTPUT );          // Конфигурируем вывод 4 Arduino как выход
    
     // инициализируем пин, подключенный к потенциометру, как вход
     //pinMode(A0, INPUT);

     pinMode( pin_Datchik_3, INPUT_PULLUP );  // Конфигурируем вывод 8 Arduino как вход  (pin8  датчик)
     pinMode( pin_Datchik_1, INPUT_PULLUP );  // Конфигурируем вывод 9 Arduino как вход  (pin9  датчик)
     pinMode( pin_Datchik_2, INPUT_PULLUP );  // Конфигурируем вывод 10 Arduino как вход (pin10 датчик)
 
     if (digitalRead(pin_Datchik_2))      // Если каретка не в начале
         {
           skorost();
           obratno();                     // Переключаем параматры двигателя движение в обратную сторону
         }         
     while (digitalRead(pin_Datchik_2))   // Пока не сработал Датчик2
         {
           start();                       // Включаем двигатель
         }
}             //void setup()

                                          
void loop()   // void loop() –  функция, которая выполняется постоянно, когда плата подключена к источнику питания 
{

        if (digitalRead(pin_Datchik_1))        // Если каретка не в конце (Датчик1 не сработал)
            {
              if (!digitalRead((pin_Datchik_3)))        // Если сработал Датчик3
                 {
                   skorost();
                   prymo();                             // Переключаем параматры двигателя движение в прямом направлении
                   while (digitalRead(pin_Datchik_1))   // Пока не сработал Датчик1
                         {
                           start();                       // Включаем двигатель  
                         }   
                 }
            }
        else                                   // Если каретка в конце (Датчик1 сработал)
            {
              if(!digitalRead((pin_Datchik_3)))        // Если сработал Датчик3
                 {
                  skorost();
                  obratno();                           // Переключаем параматры двигателя движение в обратном направлении
                  while (digitalRead(pin_Datchik_2))   // Пока не сработал Датчик2
                        {
                          start();                             // Включаем двигатель 
                        }
                 }
            }
 }     //void loop()