У меня такой же принцип Строки 39-42… Только теперь он реализован в процедуре обработки прерываний по таймеру. Прерывание срабатывает примерно раз в миллисекунду. Направление устанавливается в строке 10.
Ваш скетч проверил. Работает. Пробовал менять местами пины 3 и 4. Не работает. время задержки между импульсами достаточно 1 миллисекунды. Недавно пытался подобрать задержку. 850 микросекунд еще работает, а при 800 - нет.
Строка 38 - это намек @andriano в #24, а строки 39-42 - намек @ЕвгенийП в #37.
Ваш скетч я проверил. Об этом написано в последних строках #62.
В строке 38 моего скетча переменная takt меняется или от 0 до 7 или от 7 до 0 в зависимости от направления arrow.
В строках 39-42 переменная takt “говорит” пину - в соответствии с каким битом принять ему состояние.
Например, восьмой пин (строка 39), когда takt будет меняться от 7 до 0 будет принимать такие состояния: 11100000. Если takt=7, то PIN8 (IN1)=1, ПИН9 (IN2) =0, ПИН10 (IN3)=0, ПИН11(IN4)=1. В Вашем скетче это строки 53-56. А когда takt будет равен 6, то PIN8 (IN1)=0, ПИН9 (IN2) =0, ПИН10 (IN3)=0, ПИН11(IN4)=1. В Вашем скетче это строки 48-51. И т. д.
Поддерживать деление шагов (микрошаг) будет любой шаговый.
Использованием 28BYJ-48 с драйвером ULN2003 даже полушага не добиться.
Если 28BYJ-48 слегка разобрать и разорвать внутреннее соединение средних выводов обмоток, превратив его в биполярный, тогда можно будет используя драйвер A4988 получить и большее деление шага.
Деление шагов обеспечивает не двигатель, его обеспечивает драйвер им управляющий.
A4988 деление шага обеспечивает, но для управления им Stepper не подходит.
Если Вам интересно, Optron, почитайте лучше это
То, что мощность выше, то Вам только кажется
У шаговых,с повышением деления шага мощность на валу падает. С 28’м показалось так, потому что этот шаговый со встроенным редуктором.
То, что я сказал полушага не добиться, я и имел в виду диаграмму по Вашей ссылке, потому и предложил более подробную статейку
Вопросы шагов второстепенны в контексте библиотек. Вот когда делал рисовалку на этих же моторах, без библиотек, заметил, что не хватает им функций типа: моторы(1_50шагов, 2_-30шагов, 200мс); - т.е. синхронного движения на заданном отрезке времени. Или иными словами движения с разными скоростями заданное время.
Я выше привел пример круговой интерполяции.
Размерность примера , одна строка.
Для приведения этого кода к пониманию его Ардуино, его нужно во внешней программе привести к отдельным перемещениям, в результате код увеличится до нескольких сотен строк.
Но это половина беды. При выполнении этого кода на фрезерном станке под управлением той же марлин или рампс, все эти короткие перемещения будут видны на поверхности детали.
Что бы этого не было, система должна двигать инструмент с заданной скоростью по всем осям, участвующим в интерполяции, одновременно.