连续几天的努力,终于把红外遥控弄懂,可以控制红外小车了。终于完工了~~

1.权限:

android.permission.TRANSMIT_IR

2.发射红外代码

大多数的家用电器红外遥控编码为NEC协议。要控制家用电器可以用consumerIrManager API

ConsumerIrManager mCIR = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);

mCIR.transmit(38000, pattern);                //38000 为载波频率,pattern 为红外编码。

3.红外编码

各种家用电器的红外编码可以在 http://www.remotecentral.com/cgi-bin/codes/ 找到。

这里举一个例子:

samsung TV 的开机代码如下:

0000 006d 0022 0003 00a9 00a8 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 003f 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 003f 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 003f 0015 0702 00a9 00a8 0015 0015 0015 0e6e

这里的前4个数中只有第二个数006d有用 代表的载波频率

int frequency = Integer.parseInt("006d", 16);
frequency = (int) (1000000 / (frequency * 0.241246)); 
可以得到载波频率为 37683.1495HZ
然后后面的数字要先转换为十进制:
169 168 21 63 21 63 21 63 21 21 21 21 21 21 21 21 21 21 21 63 21 63 21 63 21 21 21 21 21 21 21 21 21 21 21 21 21 63 21 21 21 21 21 21 21 21 21 21 21 21 21 0040 21 21 21 63 21 63 21 63 21 63 21 63 21 63 21 1794 169 168 21 21 21 3694

接下来这些数字要转换为consumerIrManager 所需要的数字

1000000/37683.1495 ~=26.5

让上面的数字 乘以26.5 得到 consumerIrManager API 所需要的参数:

169 * 26.5 = 4479

.....

之后便可以发射指定的红外信号了。

4.代码

public class MainActivity extends Activity implements OnClickListener {String currentIrCode = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSend = (Button)findViewById(R.id.send);
btnSend.setOnClickListener(this);
}public void onClick(View v) {
switch(v.getId())
{
sendIrCode();
}
}
public void sendIrCode()
{
ConsumerIrManager mCIR = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);
String data = null;
data = hex2dec("0000 006d 0022 0002 0156 00aa 0016 0016 0016 0016 0016 003f 0016 003f 0016 0016 0016 003f 0016 0016 0016 003f 0016 003f 0016 003f 0016 0016 0016 0016 0016 003f 0016 0016 0016 003f 0016 0016 0016 0016 0016 003f 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 003f 0016 0016 0016 003f 0016 003f 0016 003f 0016 003f 0016 003f 0016 003f 0016 05e9 0156 0055 0016 0e3c");
String finallVal = count2duration(data);
String values[] = finallVal.split(",");
int frequency = Interger.parselnt(values[0]);int[] pattern = new int[values.length - 1];for (int i = 0; i < pattern.length; i++) {pattern[i] = Integer.parseInt(values[i + 1]);}mCIR.transmit(frequency,pattern);
}
public String hex2dec(String irData)  // 返回值:将前4个数去掉,空格变为逗号,第一个数为载波频率
{List<String> list = new ArrayList<String>(Arrays.asList(irData.split(" ")));list.remove(0); int frequency = Integer.parseInt(list.remove(0), 16); list.remove(0); list.remove(0); for (int i = 0; i < list.size(); i++) {list.set(i, Integer.toString(Integer.parseInt(list.get(i), 16)));}frequency = (int) (1000000 / (frequency * 0.241246));list.add(0, Integer.toString(frequency));irData = "";for (String s : list) {irData += s + ",";}return irData;
}
protected String count2duration(String countPattern)
{List<String> list = new ArrayList<String>(Arrays.asList(countPattern.split(",")));int frequency = Integer.parseInt(list.get(0));int pulses = 1000000/frequency;int count;int duration;
for (int i = 1; i < list.size(); i++)
{count = Integer.parseInt(list.get(i));duration = count * pulses;list.set(i, Integer.toString(duration));}String durationPattern = "";for (String s : list) {durationPattern += s + ",";}return durationPattern;
}
}

Android 手机红外遥控器实现相关推荐

  1. 红外遥控及Android手机红外遥控器开发

    一.红外遥控 红外遥控技术是通过红外技术.红外通信技术和遥控技术的结合实现的一种无线控制技术.由于红外线的波长较短,对障碍物的衍射能力较差,无法穿透墙壁,所以红外遥控术更适合应用在短距离直线控制的场合 ...

  2. android 手机红外遥控器

    原文地址:http://blog.csdn.net/zhangxy0605/article/details/74344345 现在红外遥控的使用越来越多,android 手机基本都带有红外,自己可以写 ...

  3. Android 手机红外遥控器实现(转)

    源:http://www.cnblogs.com/xiaochao1234/p/3615467.html 经过连续几天的编制,安卓手机代码终于完成了,目前已经将我宿舍,家里,集控室的红外遥控电气设备完 ...

  4. Android手机红外开发—点击和长按事件

    上一篇文章<红外技术及Android手机红外遥控器开发>中简单介绍了红外遥控技术和Android 手机红外遥控开发操控中的点击事件,只需要按照编码协议规则对键值等进行编码解析,最后转化成数 ...

  5. android手机红外代码HAL,Android 红外遥控器适配

    红外遥控器协议简介 目前有如下几类标准1. RC5 2. NEC 3. SAMSWNG 4. ...... 5. SIRC (Sony Infrared Remote Control) 目前RK平台只 ...

  6. android如何编程红外遥控,全志A20[android教程]-红外遥控器调试

    第1章 前言 要在树莓派3 (A20)android系统上实现红外遥控器,因为super3上有红外接收头,所以可以直接支持红外遥控器,可以把树莓派3应用到家庭控制当中.当作网络机顶盒用 树莓派3的 ...

  7. rk3568 Android 适配红外遥控器

    rk3568 适配红外遥控器 生活中充满了各种波长的电磁波,所谓的可见(色)光就是人眼可见的电磁波谱,其波长为 380~770nm,为了避免遥控器发射的光造成人眼不适及减少一般人造光源干扰,故选用人眼 ...

  8. android手机红外代码HAL,手机红外遥控器发送红外信号到STM32【HAL库】

    现在大部分手机上都有红外遥控功能,而且好像大部分信号STM32都是可以收到的.现在就使用STM32发送红外信号,由STM32上的红外接收器接收后执行不同的操作.以下是注意事项: 在标准库中有  EXT ...

  9. Android 手机蓝牙遥控器解决方案

    驱动力(需求): 女朋友觉得躺床上用ipad看电视剧不爽,对睡姿要求太高,还容易砸到自己,所以提出需求,没辙,搞起来: 现有设备: Rk3288 开发版一个,dell 显示器一个,小音箱一对: 思路: ...

最新文章

  1. Maven找不到要运行的JUnit测试
  2. block 实现原理详解(一)
  3. 学会理解并编辑/etc/fstab
  4. GC DevKit 快速入门 -- 游戏概览(三)
  5. vertx rest 跨域_Vertx编程风格:您的React式Web Companion REST API解释了
  6. 高中数学40分怎么办_2019年第35届全国高中数学联赛试题及参考答案
  7. Java基础11-封装(思想、访问权限、this、构造方法)
  8. python日志保存为html文件,用 Python 抓取公号文章保存成 HTML
  9. 美联社将在以太坊区块链记录NCAA锦标赛篮球比分和赛程表
  10. 报错TypeError: $(...).live is not a function解决方法
  11. PHP实现完全二叉树
  12. 万能地图下载器的不同授权在矢量地图下载功能上有哪些区别?
  13. 用计算机怎么管理小米路由器,如何为小米路由器设置局域网
  14. 《领域驱动设计》学习笔记
  15. 计算机专业女生网名,微信名字大全女生_女孩微信网名大全
  16. xp系统开机自检很久_XP开机卡在自检不能进入系统的解决办法
  17. 【光学】基于矩阵法和等效界面法分析光学薄膜膜对反射率影响附matlab代码
  18. linux speedtest-cli工具测试网络带宽、测试网速(下载速度、上传速度和延迟等信息)
  19. 教你如何正确屏蔽掉WPS弹窗广告
  20. 陀螺仪与磁力计的姿态融合——互补滤波(续)

热门文章

  1. [ 系统安全篇 ] 拉黑IP - 火绒安全软件设置IP黑名单 windows使用系统防火墙功能设置IP黑名单
  2. PythonOpenCV基础篇2线段
  3. 微信小程序入门教程学习笔记
  4. 华为Linux如何安装微信,华为手机怎么重新安装微信?
  5. ubuntu22.04卡住死机并且键盘鼠标均无反应
  6. PS图层混合模式详解
  7. 美好只在一瞬间[frwy]
  8. 【时间之外】10分钟搞懂Python+Tushare+Excel股票分析
  9. 绕过 word 文档的密码,对加密文档
  10. 【转】-ECshop数据库表结构