原标题:嵌入式Android小项目之万能手机遥控器详解

在很久很久以前,手机是有红外功能的,后来随着蓝牙技术的成熟,红外逐渐被蓝牙取代,不再是标配了。

红外本身还是有些优点,比如操作简便,成本低。要想在手机上添加红外功能,就要外接一个转换模块。

现在市面上通过Headphone音频口外接MCU实现音频转红外的方案很多。

我们的目标是做一个具有学习功能的Android手机遥控器,通过音频转红外,控制大多家电设备。

1. 硬件设计

· 右声道输出稳频正弦波,为单片机提供电源

· 左声道作为tx数据线,phone到mcu

· mic线作为rx数据线,mcu到phone

· command线,接地

右声道电源供电存在问题,Android手机千差万别,手机里的音频codec模块也不尽相同,

D/A转换的放大倍数(增益)也不同,表现在有些人的手机上铃声大,有些铃声小。

这个值是在Android系统底层驱动里设置,一般无法用上层软件改变。

用galaxy nexus,nexus 4都由于放大倍数不够而导致供电不足,而三星Galaxy S3就能提供足够的电压,一些山寨机的音量也足够大。

所以考虑更改硬件设计,加入钮扣电池,由硬件直接供电,这样比较稳妥。

2. 数据编码

自定义波形组织形式,这里提供两种频率,一种表示下一个bit不变,另一种表示下一个bit变化。

自定义一帧数据的组包形式,一般有包头,包尾,校验位和数据。

3. 核心代码

两个线程用来收发数据包

[java] view plain copy

1. Runnable _outputGenerator = new Runnable() {

2. public void run() {

3. Thread.currentThread().setPriority(Thread.NORM_PRIORITY);

4.

5. while (!_stop) {

6. updateOutputBuffer();

7. _audioTrack.write(_stereoBuffer, 0, _stereoBuffer.length);

8. }

9. }

10. };

11.

12. Runnable _inputProcessor = new Runnable() {

13. public void run() {

14. Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

15.

16. while (!_stop) {

17. int shortsRead = _audioRecord.read(_recBuffer, 0, _recBuffer.length);

18. processInputBuffer(shortsRead);

19. }

20. }

21. };

提供正弦波输出

[java] view plain copy

1. double powerMutiplier = Math.PI * (double)_powerFrequency / (double)_sampleFrequency * 2;

[java] view plain copy

1. _stereoBuffer[i*2+1] = (short) boundToShort(

2. Math.sin(powerMutiplier * _powerFrequencyPos++) * 32760); 返回搜狐,查看更多

责任编辑:

linux 蓝牙 手机遥控器,嵌入式Android小项目之万能手机遥控器详解相关推荐

  1. Android Studio项目中Build.gradlle配置详解

    许多对gradlle不了解的宝宝们总是会在配置的过程中遇到一系列的问题,大体都是对gradlle不够了解.所以在此详细说明gradlle中每一项的用处,如下 1. apply plugin: 'com ...

  2. Android 小游戏之星陨大战 详解

    该游戏核心类似于飞行射击游戏,废话少说,先上图了          这是准备过程中的一个截图,没美工啊~ 星星都是自己画上去的,外观各位就不要评论了 主要看看实现吧 首先说程序涉及的类吧 1.Main ...

  3. Android 小项目之--数据存储【Files】(附源码)

    继上篇数据存储,现在我们来讲讲另外一种数据存储,Files.本篇讲述步骤如下: 1.温故而知新,复习四种数据存储的区别. 2.什么是 Files 数据存储. 3.什么是 Properties ? 4. ...

  4. Android小项目——简易备忘录

    Android小项目--简易备忘录的实现 简易备忘录主要实现功能类似手机默认备忘录,可以对备忘录目录进行增添和删除.在编辑页面,可以显示当前时间,编辑备忘录标题,备忘录内容,设置时间提醒,插入图片等 ...

  5. Android小项目———— 冰炭不投de小计算器

    我的第一个Android小项目 冰炭不投de小计算器 一.前言 这是我首个使用java写的app,也在学习郭霖老师的第一行代码和李刚老师的疯狂java讲义之时,进行的练习之作,刚刚学习java和and ...

  6. Android小项目————聊天室(UI篇)

    Android小项目----聊天室(UI篇) 一.前言 这是所做的第二个android项目,主要目的对暑假所学的java和android知识点进行复习巩固和实践,由于知识所限,目前这个聊天室并不是很完 ...

  7. 一个特别适合新手练习的Android小项目——每日一妹纸

    原文链接 http://sparkyuan.me/ 转载请注明出处 介绍 当前版本V 1.2 刚开始学习Android的时候,主要就是学习了一些Activity的生命周期,各种View和Layout的 ...

  8. android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解

    Android适配底部虚拟按键的方法详解 发布时间:2020-10-09 05:26:12 来源:脚本之家 阅读:171 作者:yuanzhihui123 最近项目进行适配的时候发现部分(如华为手机) ...

  9. 让别人远程访问你的代码网站项目或临时演示你的项目给客户的方式详解即外网局域网访问自己的项目

    让别人远程访问你的代码网站项目或临时演示你的项目给客户的方式详解 文章目录 让别人远程访问你的代码网站项目或临时演示你的项目给客户的方式详解 引言 一.创建一个你想要别人访问的项目 二.明确你想要将这 ...

最新文章

  1. 敏捷回顾会议的套路与实践分享
  2. linux下达梦数据库启动_linux上安装tomcat和达梦数据库
  3. requestparam的作用_Spring MVC:请解释@RequestParam和@ModelAttribute之间的区别
  4. python基础(四)运算
  5. python 进阶_GitHub - eastlakeside/interpy-zh: 《Python进阶》(Intermediate Python 中文版)...
  6. Word文件标尺工具不见了,怎么恢复
  7. coreos mysql_Fedora CoreOS 介绍
  8. c语言scanf用法详解
  9. Mac连接win10打印机
  10. 凸优化——对偶问题解题步骤
  11. 我的理想600字作文计算机方面,我的理想作文600字当一名老师(共8篇)
  12. Tensorflow学习-自定义模型
  13. 消息推送----微信小程序,公众号
  14. 各种机械键盘轴线之间的差,究竟好轴
  15. 最简单的11g Active DataGuard(ADG)搭建配置过程(项目步
  16. STM32学习笔记(三)——外部中断的使用
  17. 大容量Flash型AT91系列ARM核微控制器
  18. 不学习AJAX,我可以做得更好
  19. 【网络进阶】五种IO网络模型(一)
  20. C#与SQl数据的对应关系(tinyint、smallint、int、bigint)

热门文章

  1. 人工智能:第十章 机器视觉
  2. Android开发日志打卡APP(一)
  3. linux——SMB文件共享及应用实例
  4. 系统运维架构 DevOps
  5. VS2022配置FreeImage - Windows
  6. 让数据站住脚-浅谈用户研究中的信度与效度
  7. Rsync 数据备份工具
  8. 一个简单的shell脚本--判断网段主机IP存活情况
  9. WeLink可以发邮件吗?
  10. 采油高级工实际计算机,采油工高级实际管柱图.ppt