Android Infrared Remote

Привет, друзья! Мой мобильник оказался счастливым обладателем инфракрасного передатчика. Потому было решено попробовать написать свой максимально простой протокол передачи данных. И сегодня мы с вами будем осваивать Android-класс ConsumerIRManager. Логика его работы следующая:

экземпляр класса принимает один параметр — массив типа int — длительности последовательностей «включения-выключения» в микросекундах. Включено — нужная частота модулируется, выключено — нет.

В общем, делаем выводы, что количество элементов в массиве  должно быть чётным.

На стороне «железа» предполагалось использовать датчик TL1838. Согласно документации минимально допустимое время сигнала — 500мкс. С запасом выберем 600мкс.

Далее необходимо было разработать протокол. Мы передаём один байт. А байт, как известно, есть последовательность нулей и единиц. Если байт состоит из всех единиц, то элементов в массиве будет всего два: вкл. и выкл. А если это «0b01010101»? Тогда из будет явно больше! Выходит, массив у нас переменной длины. В таком случае на помощь приходят указатели. Но работать с ними слоооожна… Не для этого я объектно-ориентированное программирование изучал. Сделаем такой финт ушами: и логический ноль, и логическая единица у нас будут передаваться модулированием. Только длительность у них будет различной.

Я думаю, здесь всё предельно ясно. par означает parity. В рабочей версии кода в конце статьи low принят равным 900мкс для улучшения надёжности. В этом случае максимальное время, затраченное на передачу байта, составляет около 16мс.

Теперь нам надо «расчухать» наш байт. Иначе — пропарсить. Используем для этого битовые маски 🙂 И помните, что по умолчанию типы данных в Java знаковые.

Далее не мудрствую лукаво берём побитовое «И» нашего байта и каждой маски. Результат заносим в массив состояний, который я назвал arrOfBits[ ].

Вся папка «src» проекта в архиве: src.zip. Обработка посылки микроконтроллером в следующих статьях 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.