1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
发表于 2014-2-24 15:27 | 显示全部楼层
本帖最后由 cjnt007 于 2014-2-24 15:29 编辑

前阵子受到坛子车友的诱惑,也跟着入了台智跑车机,为了使用方便,也想利用车机方控功能实现红外遥控。正好手上有几块Arduino Nano的板子,就不需要购买那个20多的遥控模块了,下面我把原理图和Arduino的代码分享出来。
  1. #include <IRremote.h>

  2. const int RECV_PIN = 19;//定义红外接收器的引脚为A5=D19
  3. const int Power_PIN = 8;
  4. const int Src_PIN  = 4;
  5. const int Mute_PIN = 5;
  6. const int Up_PIN  =  2;
  7. const int Down_PIN = 3;
  8. const int VolumUp_PIN = 6;
  9. const int VolumDown_PIN = 7;
  10. int KeyNum = 0;  //记录按键号,0表示为无效键
  11. int PowerState=LOW;
  12. unsigned long Counter = 0; //延时计数器

  13. IRrecv irrecv(RECV_PIN);
  14. decode_results results;

  15. void KeyDown(int IO_Num){
  16.   //切换为输出脚模式,设置为低电平输出,相当于将对应的电阻接地,
  17.   pinMode(IO_Num,OUTPUT);
  18.   digitalWrite(IO_Num,LOW);
  19. }

  20. void KeyUp(int IO_Num){
  21.   pinMode(IO_Num,INPUT);
  22. }

  23. void setup(){
  24.   //Serial.begin(9600);
  25.   irrecv.enableIRIn(); // 初始化红外接收器
  26.   irrecv.blink13(1);   //开启13脚作指示,在接收时闪烁
  27.   //设置为输入模式,各脚呈高阻抗状态,相当于开路
  28.   pinMode(Power_PIN,OUTPUT);
  29.   digitalWrite(Power_PIN,PowerState);
  30.   
  31.   pinMode(Mute_PIN,INPUT);
  32.   pinMode(Up_PIN,INPUT);
  33.   pinMode(Down_PIN,INPUT);
  34.   pinMode(VolumUp_PIN,INPUT);
  35.   pinMode(VolumDown_PIN,INPUT);
  36. }

  37. void loop() {
  38.   if (irrecv.decode(&results)) {
  39.     /*
  40.     Serial.print("ircode:");
  41.     Serial.print(results.value, HEX);//以16进制换行输出接收代码
  42.     Serial.print(",  bits: ");
  43.     Serial.println(results.bits);
  44.     Serial.println();//为了便于观看输出结果增加一个空行
  45.     */
  46.     switch (results.value){
  47.       case 0x80BF3BC4:  // Power键对应的红外接收代码,下同
  48.         //KeyNum=Power_PIN;        break;
  49.         PowerState=~PowerState;
  50.         digitalWrite(Power_PIN,PowerState);
  51.         KeyNum=0;
  52.         break;
  53.       case 0x80BF738C:  // Src
  54.         KeyNum=Src_PIN;        break;
  55.       case 0x80BF39C6:  // Mute
  56.         KeyNum=Mute_PIN;        break;
  57.       case 0x80BF53AC:  // Up
  58.         KeyNum=Up_PIN;        break;
  59.       case 0x80BF4BB4:  // Down
  60.         KeyNum=Down_PIN;        break;
  61.       case 0x80BF9966:  // V+
  62.         KeyNum=VolumUp_PIN;        break;
  63.       case 0x80BF837C:  // V-
  64.         KeyNum=VolumDown_PIN;        break;
  65.       case 0xFFFFFFFF:  //repeat
  66.         break;
  67.       default:
  68.         KeyNum=0;
  69.     }
  70.     if(KeyNum){
  71.       KeyDown(KeyNum);
  72.       delay(200);
  73.       Counter = 0;
  74.     }
  75.     irrecv.resume(); // 接收下一个值
  76.   }else{
  77.     if(KeyNum){
  78.       //delay(200);
  79.       Counter++;
  80.       if (Counter>17000){  //如果开启串口输出功能,需将条件判断改为Counter>50
  81.         KeyUp(KeyNum);
  82.         //Serial.println("Key UP");
  83.         KeyNum = 0;
  84.         Counter = 0;
  85.       }
  86.       //Serial.println(Counter);
  87.     }
  88.   }
  89. }

复制代码

说明下:
1、代码中的红外编码对应的是广电有线机顶盒遥控器的几个按键,如果换用其他遥控器,那几个16进制代码是需要更改的。
2、这个代码可以实现长按键效果,比如长按音量键连续调整音量,长按SRC(遥控器上的确认键)实现软关机。
3、遥控器上的红色待机键对应Power功能,控制5V继电器切换Power-on信号。(我使用的电源将Power-ON信号线接5V,主电源12V开始供电。)
4、Q3如果使用NPN的管子,应该将int PowerState=LOW;这行改为int PowerState=HIGH;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

31

主题

0

好友

432

积分
     

业余侠客 当前离线

Rank: 4

UID
545158
帖子
893
精华
0
经验
432 点
金钱
402 ¥
注册时间
2012-11-20
发表于 2014-2-24 15:36 | 显示全部楼层
高手!

199

主题

5

好友

1048

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
223071
帖子
6717
精华
0
经验
1048 点
金钱
844 ¥
注册时间
2010-7-23
发表于 2014-2-24 16:29 | 显示全部楼层
搞得挺复杂  手里有现成的还可以  不然麻烦啊

1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
 楼主| 发表于 2014-2-24 18:28 来自手机端 | 显示全部楼层
是的,其实现成红外模块使用很方便了。我手上正好有这板子,因此就用它折腾了,不过这样也更灵活,以后还可以开发出其他功能,比如定时开机,接上网络模块还可以实现远程控制----把车机变成物联网终端。

199

主题

5

好友

1048

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
223071
帖子
6717
精华
0
经验
1048 点
金钱
844 ¥
注册时间
2010-7-23
发表于 2014-2-25 00:02 来自手机端 | 显示全部楼层
有空研究下can吧,总是不甘心却考试下不去手哈哈!

53

主题

6

好友

1542

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
605026
帖子
2481
精华
0
经验
1542 点
金钱
1468 ¥
注册时间
2013-7-19
发表于 2014-2-25 00:11 来自手机端 | 显示全部楼层
试试用手机操控

1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
 楼主| 发表于 2014-2-25 19:01 | 显示全部楼层
万秀 发表于 2014-2-25 00:02
有空研究下can吧,总是不甘心却考试下不去手哈哈!

can对我来说还是有些难度,慢慢来

1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
 楼主| 发表于 2014-2-25 19:02 | 显示全部楼层
糖厂R35 发表于 2014-2-25 00:11
试试用手机操控

Arduino加蓝牙模块、wifi或网络模块都可以实现手机操控的。

53

主题

6

好友

1542

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
605026
帖子
2481
精华
0
经验
1542 点
金钱
1468 ¥
注册时间
2013-7-19
发表于 2014-2-25 22:55 | 显示全部楼层
cjnt007 发表于 2014-2-25 19:02
Arduino加蓝牙模块、wifi或网络模块都可以实现手机操控的。

实用不耐用

1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
 楼主| 发表于 2014-2-26 06:12 来自手机端 | 显示全部楼层
您是否试过,是不是耐用我还真不清楚,我只知道功能上很容易实现。

1

主题

0

好友

32

积分

注册会员 当前离线

Rank: 2

UID
247462
帖子
178
精华
0
经验
32 点
金钱
30 ¥
注册时间
2010-10-6
发表于 2014-2-27 22:20 | 显示全部楼层
能否用315M无线来控制呢,那个不用直视操作。或者2.4G的也可以。

1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
 楼主| 发表于 2014-2-28 13:42 | 显示全部楼层
jpdd521 发表于 2014-2-27 22:20
能否用315M无线来控制呢,那个不用直视操作。或者2.4G的也可以。

我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这样在Arduino上只要从串口上读取相应指令并执行相应动作就可以了。

1

主题

0

好友

32

积分

注册会员 当前离线

Rank: 2

UID
247462
帖子
178
精华
0
经验
32 点
金钱
30 ¥
注册时间
2010-10-6
发表于 2014-3-1 14:37 | 显示全部楼层
cjnt007 发表于 2014-2-28 13:42
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这 ...

太好了.有时间折腾一下给方向盘上装一个按键...一直都觉得少点什么.

1

主题

0

好友

32

积分

注册会员 当前离线

Rank: 2

UID
247462
帖子
178
精华
0
经验
32 点
金钱
30 ¥
注册时间
2010-10-6
发表于 2014-3-1 14:38 | 显示全部楼层
cjnt007 发表于 2014-2-28 13:42
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这 ...

http://item.taobao.com/item.htm? ... &_u=1v0j4gjd41d 帮忙看一下这个模块能用吗?是这个吗?

1

主题

0

好友

20

积分

注册会员 当前离线

Rank: 2

UID
81202
帖子
19
精华
0
经验
20 点
金钱
18 ¥
注册时间
2009-2-17
 楼主| 发表于 2014-3-3 14:27 | 显示全部楼层
jpdd521 发表于 2014-3-1 14:38
http://item.taobao.com/item.htm?spm=a230r.1.14.171.ZjuzPz&id=19357078268&_u=1v0j4gjd41d 帮忙看一下 ...

可以的,与Nano相比,简化掉了usb接口及相应的USB-TTL模块,其他功能一样的。

1

主题

0

好友

32

积分

注册会员 当前离线

Rank: 2

UID
247462
帖子
178
精华
0
经验
32 点
金钱
30 ¥
注册时间
2010-10-6
发表于 2014-3-3 22:26 | 显示全部楼层
cjnt007 发表于 2014-3-3 14:27
可以的,与Nano相比,简化掉了usb接口及相应的USB-TTL模块,其他功能一样的。

高手,其实我们可以开发产品出来放TB上面卖的。。。现在很多人方向盘都不是多功能的,升级多功能的话,很麻烦,又是线材,又是装按键的,如果把那种红外的改成这样的,极大的增加了便捷性以及升级的可行性,。给你点个赞。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部