分享下Arduino做的智跑车机遥控接收模块
本帖最后由 cjnt007 于 2014-2-24 15:29 编辑前阵子受到坛子车友的诱惑,也跟着入了台智跑车机,为了使用方便,也想利用车机方控功能实现红外遥控。正好手上有几块Arduino Nano的板子,就不需要购买那个20多的遥控模块了,下面我把原理图和Arduino的代码分享出来。
#include <IRremote.h>
const int RECV_PIN = 19;//定义红外接收器的引脚为A5=D19
const int Power_PIN = 8;
const int Src_PIN= 4;
const int Mute_PIN = 5;
const int Up_PIN=2;
const int Down_PIN = 3;
const int VolumUp_PIN = 6;
const int VolumDown_PIN = 7;
int KeyNum = 0;//记录按键号,0表示为无效键
int PowerState=LOW;
unsigned long Counter = 0; //延时计数器
IRrecv irrecv(RECV_PIN);
decode_results results;
void KeyDown(int IO_Num){
//切换为输出脚模式,设置为低电平输出,相当于将对应的电阻接地,
pinMode(IO_Num,OUTPUT);
digitalWrite(IO_Num,LOW);
}
void KeyUp(int IO_Num){
pinMode(IO_Num,INPUT);
}
void setup(){
//Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
irrecv.blink13(1); //开启13脚作指示,在接收时闪烁
//设置为输入模式,各脚呈高阻抗状态,相当于开路
pinMode(Power_PIN,OUTPUT);
digitalWrite(Power_PIN,PowerState);
pinMode(Mute_PIN,INPUT);
pinMode(Up_PIN,INPUT);
pinMode(Down_PIN,INPUT);
pinMode(VolumUp_PIN,INPUT);
pinMode(VolumDown_PIN,INPUT);
}
void loop() {
if (irrecv.decode(&results)) {
/*
Serial.print("ircode:");
Serial.print(results.value, HEX);//以16进制换行输出接收代码
Serial.print(",bits: ");
Serial.println(results.bits);
Serial.println();//为了便于观看输出结果增加一个空行
*/
switch (results.value){
case 0x80BF3BC4:// Power键对应的红外接收代码,下同
//KeyNum=Power_PIN; break;
PowerState=~PowerState;
digitalWrite(Power_PIN,PowerState);
KeyNum=0;
break;
case 0x80BF738C:// Src
KeyNum=Src_PIN; break;
case 0x80BF39C6:// Mute
KeyNum=Mute_PIN; break;
case 0x80BF53AC:// Up
KeyNum=Up_PIN; break;
case 0x80BF4BB4:// Down
KeyNum=Down_PIN; break;
case 0x80BF9966:// V+
KeyNum=VolumUp_PIN; break;
case 0x80BF837C:// V-
KeyNum=VolumDown_PIN; break;
case 0xFFFFFFFF://repeat
break;
default:
KeyNum=0;
}
if(KeyNum){
KeyDown(KeyNum);
delay(200);
Counter = 0;
}
irrecv.resume(); // 接收下一个值
}else{
if(KeyNum){
//delay(200);
Counter++;
if (Counter>17000){//如果开启串口输出功能,需将条件判断改为Counter>50
KeyUp(KeyNum);
//Serial.println("Key UP");
KeyNum = 0;
Counter = 0;
}
//Serial.println(Counter);
}
}
}
http://i03.c.aliimg.com/img/ibank/2013/473/552/1079255374_68760342.jpg
说明下:
1、代码中的红外编码对应的是广电有线机顶盒遥控器的几个按键,如果换用其他遥控器,那几个16进制代码是需要更改的。
2、这个代码可以实现长按键效果,比如长按音量键连续调整音量,长按SRC(遥控器上的确认键)实现软关机。
3、遥控器上的红色待机键对应Power功能,控制5V继电器切换Power-on信号。(我使用的电源将Power-ON信号线接5V,主电源12V开始供电。)
4、Q3如果使用NPN的管子,应该将int PowerState=LOW;这行改为int PowerState=HIGH; 高手! 搞得挺复杂手里有现成的还可以不然麻烦啊 是的,其实现成红外模块使用很方便了。我手上正好有这板子,因此就用它折腾了,不过这样也更灵活,以后还可以开发出其他功能,比如定时开机,接上网络模块还可以实现远程控制----把车机变成物联网终端。 有空研究下can吧,总是不甘心却考试下不去手哈哈! 试试用手机操控 万秀 发表于 2014-2-25 00:02 static/image/common/back.gif
有空研究下can吧,总是不甘心却考试下不去手哈哈!
can对我来说还是有些难度,慢慢来 糖厂R35 发表于 2014-2-25 00:11 static/image/common/back.gif
试试用手机操控
Arduino加蓝牙模块、wifi或网络模块都可以实现手机操控的。 cjnt007 发表于 2014-2-25 19:02 static/image/common/back.gif
Arduino加蓝牙模块、wifi或网络模块都可以实现手机操控的。
实用不耐用 您是否试过,是不是耐用我还真不清楚,我只知道功能上很容易实现。 能否用315M无线来控制呢,那个不用直视操作。或者2.4G的也可以。 jpdd521 发表于 2014-2-27 22:20 static/image/common/back.gif
能否用315M无线来控制呢,那个不用直视操作。或者2.4G的也可以。
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这样在Arduino上只要从串口上读取相应指令并执行相应动作就可以了。 cjnt007 发表于 2014-2-28 13:42 static/image/common/back.gif
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这 ...
太好了.有时间折腾一下给方向盘上装一个按键...一直都觉得少点什么. cjnt007 发表于 2014-2-28 13:42 static/image/common/back.gif
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这 ...
http://item.taobao.com/item.htm?spm=a230r.1.14.171.ZjuzPz&id=19357078268&_u=1v0j4gjd41d 帮忙看一下这个模块能用吗?是这个吗? jpdd521 发表于 2014-3-1 14:38 static/image/common/back.gif
http://item.taobao.com/item.htm?spm=a230r.1.14.171.ZjuzPz&id=19357078268&_u=1v0j4gjd41d 帮忙看一下 ...
可以的,与Nano相比,简化掉了usb接口及相应的USB-TTL模块,其他功能一样的。 cjnt007 发表于 2014-3-3 14:27 static/image/common/back.gif
可以的,与Nano相比,简化掉了usb接口及相应的USB-TTL模块,其他功能一样的。
高手,其实我们可以开发产品出来放TB上面卖的。。。现在很多人方向盘都不是多功能的,升级多功能的话,很麻烦,又是线材,又是装按键的,如果把那种红外的改成这样的,极大的增加了便捷性以及升级的可行性,。给你点个赞。。。
页:
[1]