android 空调遥控器——简单发送内容

来源:互联网 发布:淘宝拍摄相机推荐 编辑:程序博客网 时间:2024/04/30 08:00

接着上一篇我们接着研究android红外开发,本篇我们以网上最开源的格力空调编码开始研究,好了废话不多说,开搞!!

1、首先我们先来了解一下格力空调的编码格式 这个网上都有

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

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

各种编码的电平宽度:

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

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

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

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

数据码看下图

这里写图片描述

这里写图片描述

这里写图片描述

大概了解这些乱糟糟的编码之后大家县里都有一个疑问,有个蛋用,别急小编给大家一点点 拿形象点的数字拼接起来

2、数据拼接
(四个部分:起始码+35数据码+连接码+32数据码
分别:1位+35位+1位+32位=69位X2=138个时间)(每位由一个高和一个低组成)
由于这个属于命令编码 在好多地方都能用得到,我们就新建一个类把它拿出来如下: 代码里面注释很清楚了自己看下

package com.gaoyu.smarttools.date;/** * Created by ${高宇} on 17/6/3. * <p> * <p> * 下面是空调遥控器编码 * 格力空调遥控器(YB0F2)红外码组成如下,按解码顺序排列 * 起始码(S)+35位数据码+连接码(C)+32位数据码 * 各种编码的电平宽度: * 数据码由“0”“1”组成: * 0的电平宽度为:600us低电平+600us高电平, * 1的电平宽度为:600us低电平+1600us高电平 * 起始码S电平宽度为:9000us低电平+4500us高电平 * 连接码C电平宽度为:600us低电平+20000us高电平 * <p> * 校验码的形成机制如下: * 校验码 = [(模式 – 1) + (温度 – 16) + 5 +左右扫风+换气+节能]取二进制后四位,再逆序; * <p> * 例如:如果需要设置一下的状态,模式4,30℃,左右扫风,换气关闭,节能关闭,那么校验码为: * (4 – 1)+(30-16)+5+1+0+0= 23,二进制为10111,取低四位为0111,逆序后为1110 * <p> * 为了方便编码,在编码时可以正序,解码端再逆序,解码的时候先解码低字节,再解码高字节的位。 * 另外定时数据对最后的校验码的影响没有测试,因为很少会用到这个功能。 */public class CodeCommand {    //编码规则    //起始码S电平宽度为:9000us低电平+4500us高电平    public static final int startdown = 9000;    public static final int startup = 4500;    //连接码C电平宽度为:600us低电平+20000us高电平    public static final int connectdown = 600;    public static final int connectup = 20000;    //数据码由0,1组成:    //0的电平宽度为:600us低电平+600us高电平,    public static final int zerodown = 600;    public static final int zeroup = 600;    //1的电平宽度为:600us低电平+1600us高电平    public static final int onedown = 600;    public static final int oneup = 1600;    //命令格式(数组内的数值拼接)    //模式自动数组(扫风)开机    public static final int[] auto = {            startdown, startup,//起始码            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//1-3            onedown, oneup, zerodown, zeroup, zerodown, zeroup,//4-6            onedown, oneup, zerodown, zeroup, zerodown, zeroup,//7-9            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//10-12            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//13-15            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//16-18            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//19-21            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//22-24            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//25-27            zerodown, zeroup, onedown, oneup, zerodown, zeroup,//28-30            onedown, oneup, zerodown, zeroup, zerodown, zeroup,//31-33            onedown, oneup, zerodown, zeroup,//34-35  前35位数据码结束            connectdown, connectup,//连接码   后32位开始            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//36-38            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//39-41            zerodown, zeroup, zerodown, zeroup, onedown, oneup,//42-44            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//45-47            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//48-50            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//51-53            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//54-56            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//57-59            zerodown, zeroup, zerodown, zeroup, zerodown, zeroup,//60-62            zerodown, zeroup, //63            zerodown, zeroup, onedown, oneup,zerodown, zeroup, onedown, oneup,//64-67(四位检验码)后32位结束    };}

3、构造主界面调用上面咱们配置好的数组 布局就自己加吧超级简单的

//需要api大于19与下面if判断用途类似@RequiresApi(api = Build.VERSION_CODES.KITKAT)public class InfraredActivity extends BaseActivity implements View.OnClickListener {    //获取红外控制类    private ConsumerIrManager IR;    //显示详细信息    private TextView tv_detail;    private Button btn_AirConditioner_GL;    //判断是否有红外功能    boolean IRBack;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_infrared);        inItEvent();        inItUI();    }    //初始化UI    private void inItUI() {        tv_detail = (TextView) findViewById(R.id.tv_detail);        btn_AirConditioner_GL = (Button) findViewById(R.id.btn_AirConditioner_GL);        btn_AirConditioner_GL.setOnClickListener(this);    }    //初始化事务    private void inItEvent() {        //获取ConsumerIrManager实例        IR = (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);        //如果sdk版本大于4.4才进行是否有红外的功能(手机的android版本)        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            IRBack = IR.hasIrEmitter();            if (!IRBack) {                showToast("对不起,该设备上没有红外功能!");            } else {                showToast("红外设备就绪");//可进行下一步操作            }        }    }    /**     * 发射红外信号     * 可以查看这个标签的log   ConsumerIr     * @param carrierFrequency 红外传输的频率,一般的遥控板都是38KHz     * @param pattern          指以微秒为单位的红外开和关的交替时间     */    private void sendMsg(int carrierFrequency, int[] pattern) {        IR.transmit(carrierFrequency, pattern);        showToast("发送成功");        String content = null;        for(int i = 0;i<pattern.length;i++){            content += String.valueOf(pattern[i])+",";        }        tv_detail.setText(content+"\n"+(pattern.length)+"个时间数据");    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.btn_AirConditioner_GL:                if (IRBack) {                    sendMsg(38000, CodeCommand.auto);                } else {                    showToast("对不起,该设备上没有红外功能!");                }                break;        }    }}

4、跑起来效果如下
这里写图片描述

5、源码下载地址
http://download.csdn.net/detail/gywuhengy/9860555

6、继续关注哟,小编马上推出、关于空调遥控器的完整版(功能)
详情见下一篇 android 空调遥控器——遥控器基本版

原创粉丝点击