基于STM32F407的万能红外遥控器

利用stm32f407的PA8引脚的复用功能输入捕获功能,将遥控器每个按键所对应的波形记录下来,再通过红外发射头发射出去,进而来控制电器。

由于要对所有遥控器适用,这就要求程序要能够在不知道红外编码方式的前提下学习,所以我决定将遥控器发出来的所有波形都记录下来,用的时候再按这个波形发射就能够实现遥控,中间不需要解码出相应的键值码。

编程学习波形的大致思路:

将遥控器每一个按键所对应的波形学习下来(即储存高低电平的时间 参考nec编码协议部分内容)每一位信息应该对应两个时间,所以要存储200多个时间信息,建立二维数组进行存储,利用输入捕获捕获到下降沿的时候开始计时,并立即设置为上升沿捕获,上升沿时来时读取低电平时间存到数组第一位,立即将计数器清零并设置为下降沿捕获,开始计数,下降沿来时读取计数器的数值存储到素组第二位,依次类推,直到这个键值信息存储完毕,结束判断是根据是不是超过90ms的高电平,结束时最后一位可以不要。

发射学习到的波形:

利用定时器产生38khz的载波频率,将数组里边的数值作为发射时间,奇数位为发射红外引号,偶数位不发射,这样就能产生学习到的波形。具体载波发生器参见32定时器章节。

设计步骤:准确采集红外信息     解码采集到的信息      储存信息并能编码发送

发现问题及解决方案:如果不解码不好存储,(采集到的波形数据太大,尤其是空调的)所以需要转换思路,在不知道编码协议的情况下,根据自己采集到的波形规律自己设计程序解码,再按照自己的解码方式编码发送出去即完成接收和发送,从而达到万能遥控的目的

无论哪种编码方式都会有起始位(大部分是一位起始位,也有的是两位起始位)所以必须要确定好起始位,几乎所有的红外编码格式都是有一个固定的发射红外的时间(比如NEC协议  先发射560us的红外,紧接着再发560us或者1680us来决定是0还是1)所以起始位结束后(接收端)就会有一个560us的低电平(不一定是560us,但是不会超过800us)这样就能把起始位提取出来,等需要的时候再发射出去,而且同一个公司的遥控器用的起始位大体相同,但是为了保险起见一个遥控器的起始位单独存起来,换遥控器就采集新的起始位。

解码思路:从第三位有效数据开始判断是不是小于1000us若是则将前两位保存起来作为起始信号,第三位作为发射红外的时间,紧接着再往下判断是不是大于1000us,若是则提取出来作为延时时间,例如nec协议 9000 4500(起始位)  560(发射时间) 560(延时时间0  560(发射时间) 1680(延时时间1 不同的编码协议不一定就是这个数据所以要能够自适应

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值