Эх! Сам знаю.
Извините за задержку. Причёсывал комментарии.
И ещё раз прошу великодушно извинить, что загрузил Вас копанием в чужой программе.
/*
*/
boolean A[]={1,1,0,0,0,0,0,1}; //Управление фазами двигателя в полушаговом режиме
boolean B[]={0,0,0,1,1,1,0,0};
boolean C[]={0,1,1,1,0,0,0,0};
boolean D[]={0,0,0,0,0,1,1,1};
long previousMillis = 0; // храним время последнего переключения светодиода
long interval = 5000; //Время сянятия сигнала "Enable" если ничего не меняется
int Raznost=0; // Разность между текущим полпжением потенциометра и предыдущим
int Index=0; //Текущее положение привода
int IndexTek=0; //Текущее положение счётчика управления мотором
int Speed=0; //Скорость двигателя (время задержки для delay)
int Pozicia=0; //Положение движка потенциометра (с АЦП)
int OldPozicia=0; //Запоминаем положение покоя
void setup() {
pinMode(2, OUTPUT); //Сигнал "Enable" для двигателя
pinMode(4, OUTPUT); //4 Выхода управления двигателем
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Serial.begin(9600);
}
void loop() {
Pozicia = analogRead(A5); //Читаем потенциометр положения
Pozicia=Pozicia>>2; //Откидываем два младших разряда
Pozicia=Pozicia*2; //Восстанавливаем масштаб
Raznost=Index-OldPozicia; //Разность между новым и старым положением потенциометра
//Serial.println(Raznost);
if(Index>Pozicia)
{
Speed = analogRead(A0); //Читаем значение скрости двигателя
Speed=map(Speed,0,1023,0,255); //Уменьшили диапазон
Index=Index-1; //Делаем шаг назад
digitalWrite(2,HIGH); //Разрешаем движение
IndexTek=IndexTek-1; //Задаём код для управления двигателем
if (IndexTek>7){IndexTek=0;}; //Контроль диапазона для изменения кода, подающегося на двигатель
if (IndexTek<0){IndexTek=7;};
digitalWrite(4, A[indexTek]); //Подаём код на двигатель
digitalWrite(5, B[indexTek]);
digitalWrite(6, C[indexTek]);
digitalWrite(7, D[indexTek]);
delay(Speed); //Задержка (скорость) для двигателя
}
else if (Index<Pozicia)
{
Speed = analogRead(A0); //Читаем значение скрости двигателя
Speed=map(Speed,0,1023,0,255); //Уменьшили диапазон
digitalWrite(2,HIGH); //Разрешаем движение
Index=Index+1; //Делаем шаг вперёд
IndexTek=IndexTek+1; //Задаём код для управления двигателем
if (IndexTek>7){IndexTek=0;} //Контроль диапазона для изменения кода, подающегося на двигатель
if (IndexTek<0){IndexTek=7;}
digitalWrite(4, A[indexTek]); //Подаём код на двигатель
digitalWrite(5, B[indexTek]);
digitalWrite(6, C[indexTek]);
digitalWrite(7, D[indexTek]);
delay(Speed);
}
else
{
Index=Pozicia; //Запоминаем положение покоя
unsigned long currentMillis = millis(); // Показания таймера
if(currentMillis - previousMillis > interval) // Время покоя больше interval ?
{
previousMillis = currentMillis; //Запоминаем время изменения
digitalWrite(2,LOW); //Снимаем Enable со схемы управления двигателем
}
}
}