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

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

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


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

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

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

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

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

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


 2、数据码的形成机制 

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

模式标志

开关

风速

扫风

睡眠

温度数据

定时数据

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

定时数据

加湿

灯光

负离子

节电

换气

所有按键均显示此值

33

34

35

 

0

1

0

 

所有按键均显示此值

 


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

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

上下扫风

 

左右扫风

 

温度显示

 

 

 

 

 

 

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

 

 

 

 

 

 

 

 

 

 

节能

 

校验码



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



校验码形成:

校验码 = (模式 – 1) + (温度– 16) + 5  + 左右扫风 + 换气 + 节能 - 开关
之后取二进制后四位,再逆序;



下面是Python语言拼码程序,Python版本为2.7.11

#coding=utf-8
#说明:格力空调红外拼码Python脚本程序
#对应的码库为格力9,inst值:100032

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

    dat  = t - 16
    #print dat
    print bin(dat)
    for i in range(0, 4, 1):
        x = dat & 1
        #print x,
        if x == 1:
            tempCode += highLevel
        elif x == 0:
            tempCode += lowLevel
        dat = dat >> 1

    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 + 左右扫风 + 换气 + 节能 - 开关
    # 取二进制后四位,再逆序
    dat = (modeFlag - 1) + (tempFlag - 16) + 5 + fanLeftAndRightFlag + 0 + 0 - keyFlag
    print(dat)
    code = ()
    for i in range(0, 4, 1):
        x = dat & 1
        if 1 == x:
            code += highLevel
        elif 0 == x:
            code += lowLevel
        dat = dat >> 1

    #print code
    return code

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

if __name__ == "__main__":
    print("格力空调遥控器红外编码-长码")
    print("100032-格力9")
    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


  • 22
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值