Как известно, большая часть радиоуправляемой техники использует для передачи данных, так называемые PPM-сигналы (с PCM я пока не работал, к сожалению).
В двух словах этот способ передачи можно описать так. Приёмник считывает сигналы от пульта фреймами (~ по 20мс). В каждом фрейме может находиться около восьми импульсов (~ по 2мс). Каждый из этих импульсов соответствует одному каналу. RC-приёмник просто распределяет все эти импульсы из фрейма по разным выводам (каналам).
Таким образом, на выходе из пульта мы получаем сигнал с частотой около 50Гц (раз в 20мс) с управляющим импульсом длиной от 700-800 до 2000-2200 мкс . Длина этого импульса и кодирует информацию, переданную с пульта.
Иногда у любителей Ардуино может возникнуть желание взять игрушечную машинку своего сына на пульте управления, воткнуть в неё Ардуино и заставить машинку ездить самостоятельно, объезжая препятствия, или, скажем, просто сделать управление игрушкой с компьютера. Собственно здесь-то часто и возникает проблема.
Как подать нужный сигнал двигателю (с сервомашинками ситуация проще), чтобы он начал крутиться с нужной нам скоростью, если этот двигатель (ESC) работает «от пульта»?
Я попробовал поискать в Arduino-библиотеках, есть ли написанная уже библиотека эмуляции сигналов приёмника, и не обнаружил таковой. Поэтому пришлось написать самому.
Саму библиотеку для Arduino Uno можно найти здесь: http://mishmash.googlecode.com/svn/trunk/arduino/libs/PPM/
Пока написана генерация RC-сигналов только для 9-го и 10-го пинов Ардуино (т.к. там 16-битный таймер). Для нулевого таймера я писать не стал, так как на нём крутятся delay() и millis() . Ну и написана она пока только под Uno . Если кто-то захочет дописать для других Ардуин, буду очень рад )
Библиотеку протестил, отлично работает на упавляемой машинке и на серво-двигателях.