Код Грея здесь не причем.
Проблема в определении направления вращения
Метод измерения - считается количество импульсов за фиксированное время
Про дребезг - дребезга нет, на осцилле это видно.
А конкретнее проблема - думаю проще картинку будет нарисовать. Одну минуту
для направления вращения обычно ставятся под 90 град. 180 конечно же не сработает :)
нужно определить опережающий и отстающий сигнал. я бы рекомендовал перейти на измерение длительности следования импульсов (таймером по Input Capture Event) - это во-первых даст лучшие временные характеристики измериловки на малых частотах вращения, во-вторых этот же алгоритм позволит посчитать где там проскакивает 90 град. а где, соответственно длительная пауза между сигналами - 270 град.