пятница, 1 августа 2014 г.

IR Rider w Any IRremote - Управляем роботом с помощью любого ИК пульта



Снова я вне дома, снова без семьи, и-нета, друзей и телевизора. А это значит, что нужно чем-то заполнять пустоту в мозгах.
Достал из чемодана своего IR-Rider'а, а пульт, под который он был запрограммирован, остался где-то там где я тогда работал. Тут же возникла мысль запрограммировать его для обучения "на лету" под любой пульт.


И если в прошлый раз я использовал девять кнопок пульта, чтобы реализовать движение в разных направлениях:
Надписи обозначают движение робота при нажатии на кнопки

то сейчас, для удобства перепрограммирования я решил реализовать все эти движения с помощью только пяти кнопок:
Заглавные слова обозначают соответствующую кнопку на пульте
Т.е. если с положения СТОП, нажать кнопку ВЛЕВО, то робот будет разворачиваться на месте. Если с положения СТОП нажать ВПЕРЕД, то поедет вперед (спасибо кэп очевидность!!!), но если при движении вперед нажать еще кнопку ВЛЕВО, то робот начнет подворачивать по дуге влево, т.е. по направлению ВПЕРЕД и ВЛЕВО.
Работа алгоритма примерно следующая:
При подаче питания пару секунд моргает светодиод D13, и система ждет нажатия кнопки на ИК пульте. Если в это время нажать кнопку (жать нужно кнопку СТОП), то система перейдет в режим перепрограммирования, светодиод перестанет моргать и робот сделает короткий рывок в перед. Перед каждым нажатием робот делает рывок в соответствующем направлении.
Затем нужно последовательно нажать кнопки: ВПЕРЕД, НАПРАВО, НАЗАД, НАЛЕВО.
После нажатия последней кнопки, робот делает движение вперед-назад.
Робот готов к работе.
Проверяем соответствие кнопок и движения робота, и, если все устраивает, нажимаем ПЯТЬ раз подряд кнопку СТОП. Коды кнопок записываются в постоянную память микроконтроллера.
Если при подаче питания (или после сброса) подождать пару секунд и не нажимать кнопки на пульте, то коды кнопок загружаются из постоянной памяти.
Код: