掌控板红外遥控芯片5104发射驱动

MicroPython相关代码、库、软件、工具
回复
头像
shaoziyang
帖子: 3917
注册时间: 2019年 10月 21日 13:48

掌控板红外遥控芯片5104发射驱动

#1

帖子 shaoziyang »

原帖作者:chpczx 发表于 2019-7-25

红外遥控芯片5104编码采用等长编码,就是说每一位所占据的信号长度是相同的而且没有引导码,但每次发射采用多次发射,信号间隔为4位长度大约7000us.(我是用螺丝刀把遥控器拆开,才找到芯片型号的)。程序在mpython 0.33下调试通过。

Code: Select all

from mpython import *
from machine import *
import time

# 本驱动只支持红外遥控芯片 5104
# 格力电扇遥控键码
# 网上搜HS5104或5104可查阅芯片相关信息
class IRsender:
    def __init__(self, pin):
        self.pwm = MPythonPin(pin, PinMode.PWM).pwm
        self.pwm.freq(38000)
        self.pwm.duty(0)
        self.code5104()

    def code5104(self):
        self._code = [0]*5
        code_prev = [1,1,0,1,1]
        self._code[0] = code_prev + [0,0,0,0,0,0,0]
        self._code[1] = code_prev + [0,0,0,0,0,1,0]
        self._code[2] = code_prev + [0,0,0,0,1,0,0]
        self._code[3] = code_prev + [0,0,0,1,0,0,0]
        self._code[4] = code_prev + [0,0,1,0,0,0,0]

    # 将信息转成信号时间的长短
    def lock(self, code_num):
        vlist = []
        tlist = self._code[code_num]

        for i in range(len(tlist)):

            if tlist[i] == 0:
                vlist += [[422, 1266]]
            else:
                vlist += [[1266, 422]]
        return vlist

    def send(self, code_num,repeat_num):
        vlist = self.lock(code_num)

        for i in range(repeat_num):

            for t in vlist:
                self.pwm.duty(340)
                time.sleep_us(t[0])
                self.pwm.duty(0)
                time.sleep_us(t[1])
            self.pwm.duty(0)
            time.sleep_us(7000)


if __name__ == "__main__":
    s = IRsender(1)
    while 1:
        # 开关家里的电风扇
        s.send(1,3)
        sleep(2000)
        s.send(2,3)
        sleep(2000)

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章