格力空调遥控器红外编码透析

格力空调遥控器(YB0F2)红外码组成如下,按解码顺序排列 

起始码(S)+35位数据码+连接码(C)+32位数据码 


1、各种编码的电平宽度: 

数据码由“0”“1”组成: 

0的电平宽度为:600us低电平+600us高电平,

1的电平宽度为:600us低电平+1600us高电平

起始码S电平宽度为:9000us低电平+4500us高电平

连接码C电平宽度为:600us低电平+20000us高电平


 2、数据码的形成机制 

前35位数据码形成如下图所示:

格力空调遥控器红外编码透析_第1张图片

后32位数据码形成如下图所示:

格力空调遥控器红外编码透析_第2张图片

上表中,大于两位的数据都是逆序递增的,各数据的意义如下:

格力空调遥控器红外编码透析_第3张图片


校验码的形成机制如下:

校验码= [(模式– 1) + (温度– 16) + 5 +左右扫风+换气+节能]取二进

制后四位,再逆序;

例如:如果需要设置一下的状态,模式4,30℃,左右扫风,换气关闭,节能关闭,那么校验码为:

(4 – 1)+(30-16)+5+1+0+0 = 15,取低四位为0111,逆序后为1110 

 

注意:为了方便编码,在编码时可以正序,解码端再逆序,解码的时候先解码低字节,再解码高字节的位。

另外定时数据对最后的校验码的影响没有测试,因为很少会用到这个功能。



下面附上格力空调红外指令的拼码程序,使用的是Python语言,温度暂时未完成拼码


#coding=utf-8

startLevel = (9000,4500)    #起始码
linkLevel = (550,20000)     #连接码
lowLevel = (550,550)        #低电平
highLevel = (550,1660)      #高电平

#模式标志
modeFlag = 4
def modeCodeFunc(m):
    global modeFlag
    modeCode = (lowLevel+lowLevel+lowLevel, #自动
        highLevel+lowLevel+lowLevel, #制冷
        lowLevel+highLevel+lowLevel, #加湿
        highLevel+highLevel+lowLevel,#送风
        lowLevel+lowLevel+highLevel) #制热
    if m>modeCode.__len__()-1:
        print "模式参数必须小于" +str(modeCode.__len__())
        return modeCode[0]
    modeFlag = m
    return modeCode[m]

#开关
keyFlag = 0
def keyCodeFunc(k):
    global keyFlag
    keyCode = (lowLevel,    #关
           highLevel)   #开
    keyFlag = k
    return keyCode[k]

#风速
fanSpeedFlag =0
def fanSpeedCodeFunc(f):
    global fanSpeedFlag
    fanSpeedCode = (lowLevel+lowLevel,  #自动
            highLevel+lowLevel, #一档
            lowLevel+highLevel, #二档
            highLevel+highLevel)    #三档
    if f>fanSpeedCode.__len__()-1:
        print "风速参数必须小于"+str(fanSpeedCode.__len__())
        return fanSpeedCode[0]
    fanSpeedFlag = f
    return fanSpeedCode[f]

#扫风
#fanScanFlag = 0;
def fanScanCodeFunc(f):

    fanScanCode = (lowLevel,highLevel)
    fanScanFlag = f
    if f>fanScanCode.__len__()-1:
        print "扫风参数必须小于"+str(fanScanCode.__len__())
        return fanScanCode[0]
    return fanScanCode[f]

def getSleepCode(s):
    sleepCode = (lowLevel,highLevel)
    if s>sleepCode.__len__()-1:
        print "睡眠参数必须小于"+str(sleepCode.__len__())
        return sleepCode[0]
    return sleepCode[s]

tempFlag = 16;
def tempertureCodeFunc(t):
    global tempFlag
    tempFlag = t
    tempCode = lowLevel+lowLevel+lowLevel+lowLevel
    return tempCode

#定时数据
def getTimerCode():
    timerCode = lowLevel+lowLevel+lowLevel+lowLevel+\
                lowLevel+lowLevel+lowLevel+lowLevel
    return timerCode

#超强、灯光、健康、干燥、换气
def getOtherCode(strong,light,health,dry,breath ):
    otherFuncCode = ()
    if True==strong:
        otherFuncCode = highLevel
    else:
        otherFuncCode = lowLevel

    if True==light:
        otherFuncCode += highLevel
    else:
        otherFuncCode += lowLevel

    if True==health:
        otherFuncCode += highLevel
    else:
        otherFuncCode += lowLevel

    if True==dry:
        otherFuncCode += highLevel
    else:
        otherFuncCode += lowLevel

    if True==breath:
        otherFuncCode += highLevel
    else:
        otherFuncCode += lowLevel

    return otherFuncCode


#前35位结束码后七位结束码
#所有按键都是
#000 1010
def getFirstCodeEnd():
    firstCodeEnd = lowLevel+lowLevel+lowLevel+highLevel+lowLevel+highLevel+lowLevel
    return firstCodeEnd

#连接码
def getLinkCode():
    linkCode = lowLevel+highLevel+lowLevel+linkLevel
    return linkCode


#上下扫风
fanUpAndDownFlag = 1;
fanLeftAndRightFlag = 1;
def fanUpAndDownCodeFunc(f):
    global fanUpAndDownFlag
    fanUpAndDownCode = (lowLevel+lowLevel+lowLevel+lowLevel,
                    highLevel+lowLevel+lowLevel+lowLevel)
    fanUpAndDownFlag = f
    fanScanCodeFunc(fanUpAndDownFlag or fanLeftAndRightFlag)
    return fanUpAndDownCode[f]

#左右扫风

def fanLeftAndRightCodeFunc(f):
    global fanLeftAndRightFlag
    fanLeftAndRightCode =(lowLevel+lowLevel+lowLevel+lowLevel,
                      highLevel+lowLevel+lowLevel+lowLevel)
    fanLeftAndRightFlag = f
    fanScanCodeFunc(fanUpAndDownFlag or fanLeftAndRightFlag)
    return fanLeftAndRightCode[f]

#0000
#0100
#0000
#0000
#0000
def getOtherFunc2():
    otherFunc2 = lowLevel+lowLevel+lowLevel+lowLevel
    otherFunc2 += lowLevel+highLevel+lowLevel+lowLevel
    otherFunc2+= lowLevel+lowLevel+lowLevel+lowLevel+\
                lowLevel+lowLevel+lowLevel+lowLevel+\
                lowLevel+lowLevel+lowLevel+lowLevel
    return otherFunc2

def getCheckoutCode():
    #校验码=[(模式–1)+(温度–16)+5+左右扫风+换气+节能]取二进制后四位,再逆序
    tempc = (modeFlag-1)+(tempFlag-16)+5+fanLeftAndRightFlag+0+0
    print(tempc)
    j = tempc & 0x0f
    print(j)
    j_bin = bin(j)
    print "j_bin:" +j_bin
    checkout = []
    for i in range(0,4,1):
        checkout.append(j & 0x01)
        j = j>>1
    print checkout

    code = ()
    for i in range(0,4,1):
        if(1==checkout[i]):
            code +=(highLevel)
        else:
            code +=(lowLevel)
    return code

def getSecondCodeEnd():
    secondCodeEnd = (550,40000)
    return secondCodeEnd

if __name__ == "__main__":
    print("格力空调遥控器红外编码-长码")
    code = startLevel
    code += modeCodeFunc(1)     #模式:0自动,1制冷,2加湿,3送风,4加热
    code += keyCodeFunc(1)      #开关:0关,1开
    code += fanSpeedCodeFunc(0) #风速:0自动,1一档,2二档,3三档
    code += fanScanCodeFunc(0)   #扫风:0关,1开-设置上下扫风和左右扫风的时候会自动设置为1
    code += getSleepCode(0)      #睡眠
    code += tempertureCodeFunc(16)   #温度
    code += getTimerCode()          #定时
    code += getOtherCode(False,True,False,False,False)  #其他-超强、灯光、健康、干燥、换气
    code += getFirstCodeEnd()   #剩余的编码

    code += getLinkCode()       #连接码

    code += fanUpAndDownCodeFunc(0)     #上下扫风
    code += fanLeftAndRightCodeFunc(1)  #左右扫风
    code += getOtherFunc2()
    code += getCheckoutCode()
    code += getSecondCodeEnd()
    print "电平码:"
    print code

    code2 = "{"+str(code[0])+","
    for i in  range(1,len(code),1):
        code2 += "*"+str(code[i])+','
    code2 += "*0,}"
    print(code2)


你可能感兴趣的:(空调,电子,红外编码,红外遥控)