Позволю себе маленькие замечания по коду: - При инициализации глобальных переменных присваивать 0 не надо, это делается автоматически. - Глобальну переменную encoder лучше объявить static и сделать это внутри функции ReadEncoder(), ведь она больше нигде не используется...
А теперь по существу - опрашивать энкодер в главном цикле программы нехорошо, т.к. частота опроса становится непредсказуемой (на нее влияют обработчики прерываний и действия внутри главного цикла). Если уж сильно хочется опрашивать состояние энкодера поллингом, то лучше вызывать считывание состояния экодера из таймера - в этом случае хоть частота опроса будет стабильной и предсказуемой. Но при этом хорошо бы хоть примерно прикинуть максимально возможную частоту опроса, учитывая что надо опрашивать сразу два энкодера и несколько кнопок...
Может, все-таки, лучше завести одну линию от энкодера на вход прерывания и опрашивать состояние энкодера только при возникновении этого прерывания? Тогда не придется тратить процессорное время на бесполезный опрос... Но я, конечно, не настаиваю.
|