2017-02-02 12 views
1

Возможно ли реализовать ИК-приемник на Android-вещах?ИК-приемник от AndroidThings

первая мысль:
Использование GPIO в качестве входных данных и попытаться буфера изменений, а затем разобрать буфер для декодирования сообщения.
выводы:
Механизм прослушивания GPIO слишком медленный, чтобы наблюдать ИК-сигнал.
Другой способ - прочитать бесконечный цикл GPIO. Но все IR-протоколы сильно зависят от времени, а java (dalvik) в этом случае является менее точным.

вторая идея
Использование UART выводы:
Это, как представляется, можно регулировать скорость передачи данных, чтобы соблюдать все биты сообщения, но UART API требуют, чтобы количество установки стартовых битов и т.д., и это проблема, поскольку ИК-протоколы не соответствуют этой схеме.

IMHO на данный момент, UART - это единственный путь, но это было бы огромным обходным решением.

+0

Можете ли вы подробно рассказать о том, насколько медленным является слушатель GPIO и что является требованием? – shinymetal

+0

Я не знаю точно, как медленно, но я проверил, что слишком медленно читать ИК-сообщение. Пожалуйста, проверьте, например, протокол NEC http://www.sbprojects.com/knowledge/ir/nec.php , поэтому нам нужно проверить состояние каждого 560μs. –

ответ

3

Общая проблема (как вы обнаружили) заключается в том, что любая система, не относящаяся к системе реального времени, будет испытывать трудности при анализе этого ввода напрямую из-за ограничений по времени. Это работа, наиболее подходящая для микроконтроллера, где вы можете получить доступ к прерыванию таймера. Возьмите недорогой tinyAVR или PIC, чтобы управлять датчиком для вас.

Вы также захотите использовать выделенный receiver sensor (возможно, вы уже это сделали), чтобы упростить синтаксический анализ сигнала. Эти датчики включают в себя демодулятор, что означает, что вам не нужно иметь дело с импульсным сигналом 38 кГц, и вход преобразуется в более стандартную волну PWM.

+0

. Специальный датчик приемника IMHO не решает проблему. Сигнал от приемника по-прежнему слишком быстр для стандартного GPIO (два изменения состояния за 1 мс) и не подходит для схемы пакетов UART (для Android). Что бы вы предложили попробовать? –

+0

Действительно, похоже, что вы читаете вторую половину рекомендации без первой. Сенсор помогает анализировать, но вам нужен MCU для захвата ввода и разрешения ширины импульса детерминированным образом. – Devunwired

+0

@ Devunwired вы говорите, что добавляете это mcu..basically между другими компонентами? – sirvon

0

Я считаю, что вы не можете обработать ИК-сигнал на Java, потому что импульсы чтения будут быстрее, чем разрешение для чтения - по крайней мере, в малиновом пи. Чтобы получить более быстрые показания gpio, я уверен, что вы можете делать на C++ с ndk с малиной. Хотя это официально не поддерживается, есть некоторые трюки, чтобы включить его. См. How to do GPIO on Android Things bypassing Java о том, как писать в gpio в c. Оттуда должно быть тривиально читать в узкой петле. Хотя я все равно попытаюсь подключить триггер с Java, так как до сих пор у меня нет четкой лёгкой идеи о том, как писать/устанавливать прерывания в c.

+0

Это вряд ли принесет большую пользу. Основная проблема заключается не в границе интерфейса Java-Native, а в том, что без прямого доступа к аппаратным таймером вы не можете надежно вычислить ширину импульса, которая необходима для правильного ИК-захвата. – Devunwired

+1

Вы по-прежнему можете работать с жестким циклом и над образцом на 50x, аннотировать время перехода и корректировать дрожание. Громоздко, но можно улучшить. – Fabio