原文地址:https://blog.csdn.net/luhanglei/article/details/82496986
原理:当红外发射管以38KHz频率闪烁时,红外接收端可以接收到信号。通过闪烁时长的不同,可以解析出不同的信号。
因为时间精度高,不可能通过Thread.sleep()
实现。
AndroidThings支持的几种通信协议中,SPI(AT关于SPI的官方文档)比较合适(输出信号为例:CLK输出时钟,MOSI输出0/1数据),因为可以自主控制MOSI端口的高低电平,配置好对应的发射频率,就可以实现红外发射。
故使用SPI协议的输出端,修改输出频率为38KHz的整数倍,控制高低电平达到发射红外信号的目的。
以乐高PF的红外文档为模板(图片截图自乐高文档,侵删):
建立一个工具类,配置参数:
import com.google.android.things.pio.SpiDevice
object Util {
/**
* 每字节代表一次闪烁,当红外发射管以38KHz闪烁的时候,接收管才能收到信号
* one byte per cycle, 1/38K second
*/
val frequency = 38000 * 8
val bitsPerWord = 8
val bitJustification = SpiDevice.BIT_JUSTIFICATION_MSB_FIRST
/**
* 一次闪烁的信号,时长1/38K秒
* one cycle of IR
* 11110000