跳到主要内容

总结和拓展

1. 拓展一

通过实践可以发现,One—Wire 非常重要的就是获取高低电平的时间,其实红外接收管的的信号也是由开始信号+用户码+用户码(用户反码)+按键码+按键反码+结束信号组成,通信过程几乎一致,感兴趣的同学可以自行查阅相关资料对红外信号进行解码。

下面是 NEC 协议的红外遥控的方波图:

红外遥控方波图

2. 拓展二

由于通信对时序的要求很高,我们在代码中使用的是digitalWrite()pinMode() 两个 Arduino 已经为我们封装好的函数,其实更好的方法是通过寄存器进行操作,提高效率。但这样同时也会增加编程的难度。

感兴趣的同学可以参考下面的文章进行学习 AVR I/O Register Configuration

AVR I/O Register Configuration

3. 拓展三

前面我们学习的是接收 One-Wire 发送的数据包,而 One-Wire 的数据发送对时序的要求更高,我们一般不直接通过软件实现对数据的发送,而是结合相应的硬件发送数据,如 PWM,Timer,DMA,PIO 等等。

下面以 WS2812 和 DHT11 的时序作对比:

bitWS2812DHT11
‘0’0.40us H + 0.85us L50us L + 27us H
‘1’0.80us H + 0.45us L50us L + 70us H

下面是 WS2812 的时序表,想挑战一下的同学可以尝试如何自己驱动点亮 WS2812: