По вашему совету исправил код
//для управления двигателем
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; // потенциометр - регулирует скорость вращения двигателя
// Чем выше частота, тем выше скорость вращения вала.
// LOW - низкое
// HIGH - высокое
boolean Pologenie = HIGH; // Для определения первоначального положения каретки
// Если каретка не в начале , то состояние HIGH , если в начале то состояние LOW
boolean Datchik_1_current; // Текущее состояние
boolean D_1; // Флаг срабатывания Датчика1
boolean Datchik_2_current; // Текущее состояние
boolean D_2; // Флаг срабатывания Датчика2
boolean Datchik_3_current; // Текущее состояние
boolean D_3; // Флаг срабатывания Датчика3
boolean prov = HIGH; // Флаг первичной проверки при включении
boolean dvig = HIGH; // Флаг движения каретки вперед
void setup() // void setup() – функция, которая выполняется единожды, при загрузке программы
{
pinMode( pin_ENA, OUTPUT ); // Конфигурируем вывод 2 Arduino как выход.
pinMode( pin_DIR, OUTPUT ); // Конфигурируем вывод 3 Arduino как выход.
pinMode( pin_PUL, OUTPUT ); // Конфигурируем вывод 4 Arduino как выход.
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 датчик)
} //void setup()
// void loop() – соответственно функция, которая выполняется постоянно, когда плата подключена к источнику питания
void loop()
{
// Считываем показания датчиков
Datchik_1_current = digitalRead(pin_Datchik_1); // Считываем актуальное показание Датчика1
if (!Datchik_1_current) // Сравниваем новое и старое показания
{
D_1 = HIGH; // Датчик1 - сработал
}
else
{
D_1 = LOW; // Датчик1 - не сработал
}
Datchik_2_current = digitalRead(pin_Datchik_2); // Считываем актуальное показание Датчика2
if (!Datchik_2_current) // Сравниваем новое и старое показания
{
D_2 = HIGH; // Датчик2 - сработал
}
else
{
D_2 = LOW; // Датчик2 - не сработал
}
Datchik_3_current = digitalRead(pin_Datchik_3); // Считываем актуальное показание Датчика3
if (!Datchik_3_current)
{
D_3 = HIGH; // Датчик3 - сработал
}
else
{
D_3 = LOW; // Датчик3 - не сработал
}
// Условие1 при первом включении
//
if ( D_1 == LOW && D_2 == LOW && prov == HIGH )
{
// Устанавливаем движение вала в обратном направлении:
digitalWrite( pin_ENA, 0 ); // Разрешаем работу двигателя.
delayMicroseconds(5); // Выполняем задержку t1 (5мкс)
digitalWrite( pin_DIR, 1 ); // Указываем валу вижение в обратном направлении
delayMicroseconds(5); // Выполняем задержку t2 (5мкс)
// Вал движетсяв обратную сторону пока не сработает емкостной датчик 2
for(int i=0; i<10 ; i++)
{ // Выполняем 100 проходов цикла (1 оборот = 400 тактов).
digitalWrite( pin_PUL, 1 ); // Устанавливаем на выводе PUL состояние логической «1».
delayMicroseconds(1); // Выполняем задержку t3.
digitalWrite( pin_PUL, 0 ); // Устанавливаем на выводе PUL состояние логического «0».
delayMicroseconds(1); // Выполняем задержку t4.
Datchik_2_current = digitalRead(pin_Datchik_2); // Считываем актуальное показание Датчика2
if (!Datchik_2_current) // Сравниваем новое и старое показания
{
D_2 = HIGH; // Флаг сработки Датчика2
prov = LOW; // Сбрсываем флаг первой проверки положения каретки
break; // Оператор break позволяет выйти из цикла
}
}
}
// Условие2 при первом включении
if ( D_1 == HIGH && D_2 == LOW && prov == HIGH )
{
// Устанавливаем движение вала в обратном направлении:
digitalWrite( pin_ENA, 0 ); // Разрешаем работу двигателя.
delayMicroseconds(5); // Выполняем задержку t1 (5мкс)
digitalWrite( pin_DIR, 1 ); // Указываем валу вижение в обратном направлении
delayMicroseconds(5); // Выполняем задержку t2 (5мкс)
// Вал движетсяв обратную сторону пока не сработает емкостной датчик 2
for(int i=0; i<10 ; i++)
{ // Выполняем 100 проходов цикла (1 оборот = 400 тактов).
digitalWrite( pin_PUL, 1 ); // Устанавливаем на выводе PUL состояние логической «1».
delayMicroseconds(1); // Выполняем задержку t3.
digitalWrite( pin_PUL, 0 ); // Устанавливаем на выводе PUL состояние логического «0».
delayMicroseconds(1); // Выполняем задержку t4.
Datchik_2_current = digitalRead(pin_Datchik_2); // Считываем актуальное показание Датчика2
if (!Datchik_2_current) // Сравниваем новое и старое показания
{
D_2 = HIGH; // Датчика2 сработал
prov = LOW; // Сбрсываем флаг первой проверки положения каретки
D_1 = LOW;
break; // Оператор break позволяет выйти из цикла
}
}
}
// Условие3 при первом включении
if ( D_2 == HIGH && prov == HIGH )
{
prov = LOW; // Сбрсываем флаг первой проверки положения каретки
}
// Если Условие1 и Условие2 не сработали и каретка находится в начале (Датчик 2 сработал)- прямое движение каретки по Датчику3
if (D_3 == HIGH && D_2 == HIGH && dvig == HIGH && prov == LOW ) // Сравниваем новое и старое показания
{
// Начинаем движение каретки вперёд
// Устанавливаем движение вала в обратном направлении:
digitalWrite( pin_ENA, 0 ); // Разрешаем работу двигателя.
delayMicroseconds(5); // Выполняем задержку t1 (5мкс).
digitalWrite( pin_DIR, 0 ); // Указываем валу вижение в прямом направлении
delayMicroseconds(5); // Выполняем задержку t2 (5мкс).
// Вал движется в прямом направлении пока не сработает емкостной Датчик1
for (int i=0; i<100 ; i++)
{
digitalWrite( pin_PUL, 1 ); // Устанавливаем на выводе PUL состояние логической «1».
delayMicroseconds(1); // Выполняем задержку t3.
digitalWrite( pin_PUL, 0 ); // Устанавливаем на выводе PUL состояние логического «0».
delayMicroseconds(1); // Выполняем задержку t4.
//Datchik_1_current = digitalRead(pin_Datchik_1); // Считываем актуальное показание Датчика2
//if (!Datchik_1_current ) // Сравниваем новое и старое показания
}
}
} // void loop()
