Вопрос интересный... Сначала надо определиться с несколькими вещами.
1) 1 оборот колеса это определенная дистанция. L
2) На энкодере есть определенное число прорезей. это N
отсюда вытекает
3) S=L/N - минимальное определяемое расстояние.
4) Получаем нужное нам расстояние DIST, делим его на S, M=DIST/S , т.е. энкодер должен в определенном направлении (тут мы точно знаем в каком!) получить M сигналов... а для этого даже энкодер не нужен. достаточно прерывателя и диска.. но это так. Если отслеживать изменения, то можно и уменьшить шаг..но при условии, что прорези и не прорези равны по размеру.
5) На 2-ой или 3-ий пин вешаем прерываение (в setup)
pinMode (2, INPUT_PULLUP);
attachInterrupt(0, GOGOGO, RISING);
Имеем функцию обработки прерывания
volatile int Step;
void GOGOGO()
{
Step++;
if (Step==Нужное кол-во шагов)
{остановить мотор};
}
как бы все , но это черновик, надо пробовать , тестировать конечно
конечно надо при запуске мотора обнулятm Step и задавать нужное кол-во шагов