幻生幻灭 发表于 2013-2-21 09:59:23

Arduino红外遥控系列教程2013——红外转码扩展应用1

本帖最后由 幻生幻灭 于 2013-2-21 09:40 编辑

教程四:红外转码扩展应用1——用电视遥控器控制电脑,实现无线键盘


前言
有时候,在家里看电影,用电脑通过视频线连接电视会很爽,如果再能用电视遥控器同时控制电脑就更方便啦。我们在前两篇系列教程基础之上,来一个红外转码扩展应用,采用了Arduino Leonardo作为主控。用电视遥控器控制电脑,实现无线键盘。先上视频

http://v.youku.com/v_show/id_XNTE2NjY3MDQw.html
视频链接:http://v.youku.com/v_show/id_XNTE2NjY3MDQw.html


在开始之前,请先确认你已经熟悉了本系列的前两篇教程。因为外围电路是一样的,且程序也几乎没有变化。因此重复的部分这里就不过多的描述了。
Arduino红外遥控系列教程2013——发射与接收[链接]
Arduino红外遥控系列教程2013——红外转码[链接]

第一步 更新Leonardo的Bootloader

之前版本的Bootloader会有串口通信BUG,更新官方最新版本后,问题解决。
本教程使用了官方推荐的USBtinyISP,只需在Arduino IDE的Tools中选择USBtinyISP下载器,在Board中选择Arduino Leonardo,连接好下载线,点击Burn Bootloader烧录即可。


第二步 连接硬件


硬件电路请跳转 Arduino红外遥控系列教程2013——发射与接收[链接]


第三步 下载程序
//IR remote for PC
//http://weibo.com/leolite
//By Leo 2013.02.19


#include <IRremote.h>
// #include <EEPROM.h>

#include "IR_Receive.h"
#include "IR_Send.h"
#include "IR_Value.h"
#include "Keyboard.h"
#include "Mapping.h"

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;
unsigned long date;

int addr = 0; //for EEPROM
int index = 0; //for array
int mapto = 0; //for mapping

void setup()
{
Serial.begin(9600);
// make pin 2 an input and turn on the
// pullup resistor so it goes high unless
// connected to ground:
pinMode(2, INPUT_PULLUP);
Keyboard.begin();
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {


    //Block 1 start
    //search from IR_Reveive.h and return index
    if(results.value != ir_code_r){
      for(int i=0;i<256;i++){
      if( results.value== ir_code_r){
          index = i;
          break;
      }
      }
    }


    //block 3 mapping
    mapto = mapping;
   // Serial.println(key_define,HEX);
    //block 3 end

    //Send the message
    Keyboard.write(key_define);

    irrecv.resume(); // Receive the next value
}
}


这里在贴一张键盘编码子程序的截图


第四步 体验遥控乐趣^_^


思路扩展
红外通讯的应用非常广泛,而且相对蓝牙和Wifi成本低了很多,我们还可以用Arduino做成红外手柄去玩电脑游戏。如果手头有两三块Arduino的话,可以多做几个手柄,回味下小时候玩土星游戏机的感觉。当然越复杂的应用程序也需要完善,例如增加抗干扰处理。最后希望看到大家分享自己的红外遥控器。

Randy 发表于 2013-2-21 12:22:03

写教程是需要时间和精力的,赞一个!

大连好人 发表于 2013-2-21 17:25:26

不好意思,没看懂,怎样通过“Keyboard.write(key_define);”这么一句就控制电脑了呢?

我每天都把电脑接电视上看电影,确实需要这么一个东西呢。。。。

wsy0315 发表于 2013-2-21 19:35:13

顶一个,因为编辑帖子真的是很辛苦 啊

tom 发表于 2013-2-21 20:47:44

好勤奋啊,几天就出了一个完整的系列文章。

幻生幻灭 发表于 2013-2-22 09:31:41

tom 发表于 2013-2-21 20:47 static/image/common/back.gif
好勤奋啊,几天就出了一个完整的系列文章。

其实年前就开始弄啦,只不过整理了以后一起发的。
之前还拜读过你的红外系列帖子,呵呵。也学习了很多

Anson 发表于 2013-2-22 22:37:21

这个正是我目前需要的

mjgzdnw 发表于 2013-2-25 11:16:03

真不错,这些日子也在看红外线,谢谢楼主。

只可惜现在很多手机都把红外线功能去掉了,不知道怎么给手机加红外线,如果能行的话那就有趣多了。

幻生幻灭 发表于 2013-2-25 13:24:31

大连好人 发表于 2013-2-21 17:25 static/image/common/back.gif
不好意思,没看懂,怎样通过“Keyboard.write(key_define);”这么一句就控制电脑了呢?

我每天都 ...

这里我只贴了主程序,Keyboard.write()实现发送按键事件,而key_define是子程序中的一个数组,里面有按键编码。mapto是映射数组的地址。 详见附件程序

幻生幻灭 发表于 2013-2-25 14:17:36

mjgzdnw 发表于 2013-2-25 11:16 static/image/common/back.gif
真不错,这些日子也在看红外线,谢谢楼主。

只可惜现在很多手机都把红外线功能去掉了,不知道怎么给手机 ...

没办法哦,不过有用音频口转红外的

Pizzro 发表于 2013-6-15 21:19:35

请问这是什么型号的发射管。电压范围在?

幻生幻灭 发表于 2013-6-15 21:38:14

Pizzro 发表于 2013-6-15 21:19 static/image/common/back.gif
请问这是什么型号的发射管。电压范围在?


5MM 940nm红外发射管 (0.9~1.3V)

疯子。 发表于 2013-6-18 21:33:57

本教程使用了官方推荐的USBtinyISP,只需在Arduino IDE的Tools中选择USBtinyISP下载器,在Board中选择Arduino Leonardo,连接好下载线,点击Burn Bootloader烧录即可。

为什么要选择USBtinyISP

幻生幻灭 发表于 2013-6-19 09:00:07

疯子。 发表于 2013-6-18 21:33 static/image/common/back.gif
本教程使用了官方推荐的USBtinyISP,只需在Arduino IDE的Tools中选择USBtinyISP下载器,在Board中选择Ardui ...

下载器手头有啥就用啥了,而且也挺好用的为啥不选呢?

葱头同学 发表于 2013-6-20 22:40:49

IR_Send.h为嘛是空的捏
页: [1] 2
查看完整版本: Arduino红外遥控系列教程2013——红外转码扩展应用1