Сообщение от AVRkin
|
наверно прерывание нужно , которое возникает при отпускании всех кнопок
кнопки скорости, при достижении предела начинают в обратную сторону работать
|
Через промежутки времени наступает прерывание от переполнения таймера. Промежутки выбираются любыми - это будет частота обращения к клавиатуре.
Войдя в прерывание, быстро опрашиваем матрицу клавиатуры или просто кнопки, определяем, было ли что-то нажато и если да, то что именно. Потом, если нет времени и нужно быстро сваливать из прерывания, то заносим куда-нить код нажатой кнопки (коды присваиваем какие угодно) и еще например устанавливаем флаг факта нажатия. Позднее, программа, увидев флаг факта нажатия, поймет, что было че-то нажато, а прочитав код, определит, что конкретно нажато и что надо выполнить. Или же прямо в прерывании после определения того, че было нажато, выполнить требуемое действие по нажатию.
Если по нажатию кнопки какой-то параметр должен изменяться на величину шага дискретно, то чтобы за доли секунды не улететь от мин. до макс., нужно ввести задержку, подсчитывая количество входов в этот участок кода и выполняя очередное изменение параметра только после достижения какого-то числа.
Если нужно, чтобы за одно нажатие кнопки параметр менялся только на один шаг, то нужно перед тем, как изменить параметр по нажатию кнопки, убедиться, что до этого кнопка была отпущена или не нажата. Делается это при помощи флагов состояния.
Если нужно, чтобы по короткому нажатию кнопки выполнялось одно действие, а по долгому нажатию какое-то другое (или например непрерывное изменение параметра), то любое действие нужно выполнять только после отпускания кнопки из нажатого положения, измеряя длительность удержания кнопки по количеству входов в участок кода и проверяя превышение порога длительности. По факту нажатия запускается только подсчет длительности удержания кнопки.
Если параметр после увеличения до максимума (или уменьшения до минимума) продолжает изменяться по кругу, не остановившись на пределах, то надо перед очередным увеличением или уменьшением параметра ввести проверку на достижение пределов. Если пределы достигнуты, то параметр не должен изменяться в заданном или противоположном направлении.
Если клавиатура допускает ложные срабатывания, когда вместо одного факта нажатия получаются два-три, то нужно увеличить интервалы обращения к клавиатуре.
Если наоборот, клавиатура делает пропуски и с задержкой реагирует на нажатия, нужно уменьшить интервалы, задаваемые таймером.
Прежде чем браться за ИК-протоколы, нужно научится вообще управляться с кнопками..
Если и передатчик, и приёмник будут самодельные полностью, то пофик на протоколы и команды. От протокола взять только основу, а структуру бит и количество байт - придумать отфанаря