是否有可能在android-things上实现IR接收器?
第一个想法:
使用GPIO作为输入并尝试缓冲更改,然后解析缓冲区以解码消息
的结果:
GPIO监听器机制太慢,无法观察IR信号
另一种方法是读取GPIO无限循环。但是所有IR协议都强烈依赖于时间,而java(dalvik)在这种情况下则不太准确。
第二个想法
使用UART
的结果:
似乎可以调整波特率来观察消息的所有位,但是UART API需要设置起始位的数量等,这是一个问题,因为IR协议不适合该模式。
答案 0 :(得分:3)
总体问题(正如您所发现的)是由于时序限制,任何非实时系统都难以直接解析此输入。这是一个最适合微控制器的工作,可以访问定时器中断。获取便宜的tinyAVR或PIC来管理传感器。
您还需要使用专用的receiver sensor(您可能已经这样做)来简化信号的解析。这些传感器包括一个解调器,这意味着您不必处理38kHz脉冲信号,并将输入转换为更标准的PWM波。
答案 1 :(得分:0)
我相信你不能用Java处理IR信号,因为读取脉冲会比读取分辨率更快 - 至少在覆盆子pi中。为了获得更快的gpio读数,我相信你可以使用带有覆盆子的ndk在c ++中完成。虽然它没有得到官方支持,但还是有一些技巧可以启用它。有关如何在c中写入gpio的信息,请参阅How to do GPIO on Android Things bypassing Java。从那里开始阅读紧凑循环应该是微不足道的。虽然到目前为止我仍然试图从Java挂钩触发器,但我对如何在c中编写/安装中断没有明确的想法。