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

接着上一篇我们接着研究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位结束

    };

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

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;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

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

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

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

#include "remote.h" #include "delay.h" #include "usart.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK战舰STM32开发板 //红外遥控解码驱动 代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2012/9/12 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// u8 g_IR_RecFlag = 0; //红外接收到标志 //红外遥控初始化 //设置IO以及定时器4的输入捕获 void Remote_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PORTB时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM4 时钟使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PB9 输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO;_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_9); //初始化GPIOB.9 TIM_TimeBaseStructure.TIM_Period = 10000; //设定计数器自动重装值 最大10ms溢出 TIM_TimeBaseStructure.TIM_Prescaler =(35-1); //预分频器,1M的计数频率,1us加1. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM4, &TIM;_TimeBaseStructure); //根据指定的参数初始化TIMx TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; // 选择输入端 IC4映射到TI4上 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //上升沿捕获..改为下降沿捕获 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频 TIM_ICInitStructure.TIM_ICFilter = 0x03;//IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波 TIM_ICInit(TIM4, &TIM;_ICInitStructure);//初始化定时器输入捕获通道 TIM_Cmd(TIM4,ENABLE ); //使能定时器4 NVIC_InitStructure.NV
### 回答1: 开发 Android 空调遥控器涉及以下几个方面的工作: 1. 界面设计:首先要设计一个用户友好的界面,确保用户能够轻松理解和使用遥控器功能。界面应该包括温度调节、风速选择、模式选择、定时开关机等功能。 2. 通信协议:需要与空调进行通信,以发送控制指令和接收状态信息。可以使用红外线技术或 Wi-Fi 等无线技术实现通信。对于红外线通信,需要调研并找到特定空调品牌和型号的红外线控制指令集。对于 Wi-Fi 通信,需要设计与空调通信的网络协议。 3. 状态更新和同步:在用户调节遥控器参数后,需要及时将设置的参数发送空调,并确保空调收到指令后做出相应的操作。同时,还需要定期从空调读取当前的工作状态,例如温度、风速等,并更新到遥控器界面上,便于用户实时监控和调节。 4. 兼容性考虑:考虑到不同品牌和型号的空调具有不同的控制方式和功能设置,开发时需要充分考虑兼容性。可以通过提供用户可自定义的参数配置功能,让用户可以在遥控器上选择对应的空调品牌和型号,以及支持的功能,从而适配各种空调设备。 5. 其他功能增强:最后,可以考虑为遥控器增加一些实用的功能,例如支持语音控制、场景模式设置、设备联动等,以提升用户体验。 总体而言,开发 Android 空调遥控器需要通过界面设计、通信协议、状态更新、兼容性考虑和功能增强等多个方面的工作来实现。这些工作需要结合具体的需求和技术要求进行设计和开发,最终提供给用户一个方便、易用且功能丰富的空调遥控器应用。 ### 回答2: Android空调遥控器开发是基于Android操作系统的智能设备遥控应用程序。该应用程序可以与用户的空调设备进行无线连接,通过无线信号与空调设备进行通信,并模拟空调遥控器的功能,实现远程控制空调设备的操作。 在进行Android空调遥控器开发时,首先需要实现与空调设备的无线连接功能。可以利用蓝牙、红外线或者Wi-Fi等通信方式实现设备连接。通过与空调设备建立连接之后,可以获取设备的状态和参数信息,从而实现对空调设备的遥控操作。用户可以通过触摸屏幕上的操作按钮或者滑动条,调节空调的温度、风速、模式等参数,同时也可以进行定时、定位、控制多个空调等特殊功能。 在开发过程中,需要使用Android开发工具,如Android Studio,并结合空调设备的通信协议,编写相应的代码实现连接和与空调设备的通信。此外,还需要设计应用程序的用户界面,包括各种操作按钮和界面布局等。应用程序还应该具备良好的用户体验,保证操作的简单易懂和流畅性能。 Android空调遥控器的开发可以带来许多便利性和舒适性。用户可以随时随地通过手机对家中的空调设备进行远程控制,无需亲临现场进行操作。而且可以利用智能手机的多媒体功能,进行更加个性化的设置和控制。 总之,Android空调遥控器开发是一项基于Android操作系统的智能设备遥控应用程序的开发工作。通过与空调设备的无线连接和通信,实现对空调设备的遥控操作,提供更加方便和舒适的使用体验。 ### 回答3: 开发 Android 空调遥控器是为了实现通过手机控制空调的功能。首先,我们需要设计一个用户友好的界面,包括一些基本的控制按钮,如开、关、调温、调风等。通过与空调的通信接口,我们可以将用户在手机上的操作指令传输到空调设备上。 在开发过程中,我们需要注意以下几点: 1. 兼容性:确保该遥控器应用程序能够支持主流的 Android 手机和智能设备。 2. 连接性:通过蓝牙、Wi-Fi 或红外线技术,实现手机与空调之间的无线连接。 3. 控制功能:在应用程序中提供各种必要的控制功能,如调节温度、调整风向、设置定时功能等。 4. 数据传输安全性:确保用户在使用手机遥控器时的数据传输是安全的,防止他人恶意干扰。 5. 自定义设置:为用户提供自定义选项,使他们能够根据自己的需求进行个性化设置,如添加多个设备、命名等。 6. 易于使用:设计简单直观的用户界面,使用户能够轻松地理解和操作。 通过上述开发,用户将能够通过他们的 Android 手机方便地操控空调,无需再去寻找遥控器或靠近空调设备。这将为用户带来更多的便利性和舒适感。随着智能家居的发展,这样的应用程序也能与其他智能设备进行连接,实现更智能化的家庭控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值