arduino遥控接收mini遥控器全部按键响应.docx
- 文档编号:25152130
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:9
- 大小:15.41KB
arduino遥控接收mini遥控器全部按键响应.docx
《arduino遥控接收mini遥控器全部按键响应.docx》由会员分享,可在线阅读,更多相关《arduino遥控接收mini遥控器全部按键响应.docx(9页珍藏版)》请在冰豆网上搜索。
arduino遥控接收mini遥控器全部按键响应
arduino遥控接收(mini遥控器全部按键响应)
//初学时注意:
//无线遥控模块发射的高电平,接受时接收到的是低电平响应。
为提高响应遥控灵敏度,//本文放宽了对时间的约束。
//使用时:
//请先编辑功能模块函数(workfun),后添加到(switch)按键下。
//------------------------workfun-------------------
Voidmode1()//模块一
{
}
Voidmode2()//模块二
{
}
//................
//可编辑需要遥控下执行的模块
//--------------------------------------------------------
//--------------默认接收引脚为数字8-----------------------
intPulse_Width=0;//存储脉宽
intir_code=0x00;//命令值
//---------------timer------------------
voidtimer1_init(void)//定时器初始化函数
{
TCCR1A=0X00;
TCCR1B=0X05;//给定时器时钟源
TCCR1C=0X00;
TCNT1=0X00;
TIMSK1=0X00;//禁止定时器溢出中断
}
//--------------deal-------------------------
voidremote_deal(void)//执行译码结果函数
{
switch(ir_code)
{
case0xff00:
//停止按键
//要执行的函数例如
Mode1();
break;
case0xf30c:
//0
//要执行的函数
break;
case0xef10:
//1
//要执行的函数
break;
case0xee11:
//2
//要执行的函数
break;
case0xed12:
//3
//要执行的函数
break;
case0xeb14:
//4
//要执行的函数
break;
case0xea15:
//5
//要执行的函数
break;
case0xe916:
//6
//要执行的函数
break;
case0xe718:
//7
//要执行的函数
break;
case0xe619:
//8
//要执行的函数
break;
case0xe51a:
//9
//要执行的函数
break;
case0xfe01:
//vol+
//要执行的函数
break;
case0xfd02:
//stop
//要执行的函数
break;
case0xfb04:
//上一曲
//要执行的函数
break;
case0xfa05:
//暂停
//要执行的函数
break;
case0xf906:
//下一曲
//要执行的函数
break;
case0xf708:
//下三角
//要执行的函数
break;
case0xf609:
//vol-
//要执行的函数
break;
case0xf50a:
//上三角
//要执行的函数
break;
case0xf20d:
//EQ
//要执行的函数
break;
case0xf10e:
//ST
//要执行的函数
break;
}
}
//--------------------------------------
charlogic_value()//判断逻辑值“0”和“1”子函数
{
while(!
(digitalRead(8)));//低等待
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=5&&Pulse_Width<=12)//低电平560us
{
while(digitalRead(8));//是高就等待
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=5&&Pulse_Width<=12)//接着高电平560us
return0;
elseif(Pulse_Width>=22&&Pulse_Width<=30)//接着高电平1.7ms
return1;
}
return-1;
}
//------------------------------------------
voidpulse_deal()//接收地址码和命令码脉冲函数
{
inti;
//执行8个0
for(i=0;i<8;i++)
{
if(logic_value()!
=0)//不是0
return;
}
//执行6个1
for(i=0;i<6;i++)
{
if(logic_value()!
=1)//不是1
return;
}
//执行1个0
if(logic_value()!
=0)//不是0
return;
//执行1个1
if(logic_value()!
=1)//不是1
return;
//解析遥控器编码中的command指令
ir_code=0x00;//清零
for(i=0;i<16;i++)
{
if(logic_value()==1)
{
ir_code|=(1<
}
}
}
//-----------------------------------------
voidremote_decode(void)//译码函数
{
TCNT1=0X00;
while(digitalRead(8))//是高就等待
{
if(TCNT1>=1800)//当高电平持续时间超过100ms,表明此时没有按键按下
{
ir_code=0xff00;
return;
}
}
//如果高电平持续时间不超过100ms
TCNT1=0X00;
while(!
(digitalRead(8)));//低等待
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=130&&Pulse_Width<=150)//9ms
{
while(digitalRead(8));//是高就等待
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=60&&Pulse_Width<=80)//4.5ms
{
pulse_deal();
return;
}
elseif(Pulse_Width>=30&&Pulse_Width<=40)//2.25ms
{
while(!
(digitalRead(8)));//低等待
Pulse_Width=TCNT1;
TCNT1=0;
if(Pulse_Width>=5&&Pulse_Width<=12)//560us
{
return;
}
}
}
}
//--------------------------------------------
voidsetup()
{
//---------------------------
pinMode(8,INPUT);//设置红外接收引脚为输入
//其他初始化
}
voidloop()
{
timer1_init();//定时器初始化
while
(1)
{
remote_decode();//译码
remote_deal();//执行译码结果
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arduino 遥控 接收 mini 遥控器 全部 按键 响应