怎样用安卓智能手机做红外万能遥控器

怎样用安卓智能手机做红外万能遥控器,第1张

具有红外功能的安卓手机可以做万能遥控器,以华为手机为例, *** 作流升余者程如下:

1、手机在工具箱找到并点击【智能遥控】。

2、在智能遥控界面点击【添加】。

3、遥控类型支持电视、空调和机顶盒等设备,这里以【空调】为例。

4、点击后,进入空调型号选毁慎择列表,这里以【格力】为例,点击它。

5、按照提示对准空调点击下图所示的电源按键。

6、空调成功启动后,吵薯选择【是】,完成设置,重复以上步骤添加其他设备遥控。

   红外接收头的主要功能为IC化的一种受光元件,其内部是将光电二极管(俗称接收管)和集成IC共同组合封装而成,其IC设计主要以类比式控制,一般主要接收38KHZ的频率的红外线,而对其他频率段的红外信号不敏感。这样,遥控器发出载波在38KHZ的频率,接收管接受遥控器发送过来的信息,从而构成通讯。

★Raspberry Pi主板*1

★树莓派电源*1

★40P软排线*1

★红外接收模块*1

★红外遥控器模块*1

★RGB LED模块*1

★面包板*1

★跳线若干

  在本实验中,我们将使用PWM脉宽调制技术来控制RGB的亮度。详情可以查看前面的实验: 树莓派基础实验2:RGB-LED实验 。

  我们使用lirc库读取遥控器按钮返回的红外信号,并将它们转换为按钮值,然后使用pylirc来简化从远程控制中读取值的过程。在本实验中,使用遥控器顶部的9个按钮来控制RGB LED模块的颜色。每行代表一种颜色,每列代表亮度。

   第1步: 连接电路。

   第2步: 安装lirc库,配置详情这里不作介绍。

  检查该模块是否已加载,你应该看到“/dev/lirc0”。

  然后使用“irw”命令测试,按遥控器上的按钮,看屏幕上是否打印按钮名称,如下图所示:

python lirc模块,有关LIRC的更多信息,请参见 http://www.lirc.org

lirc模块的函数及功能介绍如下:

   第3步: 编写控制程序。遥控器上的前三行按钮中的每一行代表一种颜色,即从上到下一次控制红色、绿色和蓝色。每列代表关灯、亮和暗。例如,按第一行的第二个按钮,是控制红色灯亮。

  你可以使用遥控器共生产27种颜色,包括关闭所有led灯。

  

红外遥控程序

#include "SPCE061A.H"

#define LED_SEG 0x00ff //IOB0~IOB7

#define LED_DIG 0x3f00 //IOB8~IOB13

unsigned int Time=0,Code[40]={0},CodeNum=0//计数器,32位码,码字计数

//extern unsigned int Time,CodeNum,Code[40]

unsigned int Star_Flag,First_IRQ

//====================================================================================

//函数名称:unsigned getkey(void)

//函数功能:获得红外遥控器键值

//入口参数:无

//出口参数:无

//说明:适用于32位码字红外接收头及宏科万能遥控器

//====================================================================================

unsigned getkey(void)

{

unsigned int j=0

unsigned int DateCode,key=0

if(Code[0]==5) //判断头部是否是5;防止误接收

{ for(j=9j<=14j++)

{

*P_Watchdog_Clear = 0x01

if(Code[j]==1&&Code[j+1]==1&&Code[j+2]==1&&Code[j+3]==1&&Code[j+4]==1&&Code[j+5]==1&&Code[j+6]==0&&Code[j+7]==1)

{ //判断用户识别码是不是1111 1101

for(DateCode=0DateCode<8DateCode++)//若是,则开始接收八位数据码

{

Code[j+8+DateCode]<<=8

key|=Code[j+8+DateCode]

key>>=1 //将八位二进制数倒序转成16进制

}

break

}

}

Code[0]=0//将头部清零

return key//返回键值

}

else return(0)

}

//====================================================================

//函数名称:void IO_Init()

//函数功能:IO口初始化,主要是设置IOB2口,用于外中断

//入口参数:无

//出口参数:无

//====================================================================

void IO_Init()

{

*P_IOB_Attrib&=0xfffb //IOB2端口上拉电阻输入 外中断

*P_IOB_Dir&=0xfffb

*P_TimerA_Ctrl=C_SourceA_32768Hz+C_SourceB_1//TimerA:32768Hz

*P_TimerA_Data=0xfffe

*P_INT_Ctrl=C_IRQ3_EXT1|C_IRQ1_TMA// 外中断1,时基中断,定时中断

__asm("INT IRQ")

}

//做档=====================================================================

//函数并厅名称:

//函数功能绝胡隐:中断函数

//入口参数:无

//出口参数:无

//=====================================================================

void IRQ3(void) __attribute__ ((ISR))

void IRQ3(void)

{

if(*P_INT_Ctrl&C_IRQ3_EXT2)

{ //IRQ3_Ext1

*P_INT_Clear=C_IRQ3_EXT2

}

else if(*P_INT_Ctrl&C_IRQ3_EXT1)

{//外中断1用于判断脉冲个数

if(!First_IRQ) {Time=0First_IRQ=1}//第一次外中断来时设置

else

{

if(Time>180&&Time<240)//判断起始码

{Star_Flag=1CodeNum=0Code[0]=5CodeNum=1Time=0}//起始码来时设置

if(Star_Flag)//开始接收

{

if((Time>=10)&&(Time<25))Code[CodeNum]=0//计数值设置

else if((Time>25)&&(Time<40))Code[CodeNum]=1

CodeNum++//码字计数器加1

Time=0//计数值清零,以对下一个脉冲宽度进行计时

if(CodeNum>40) {CodeNum=0Star_Flag=0First_IRQ=0}//脉冲个数判断,共32个,此处设为40,是为防止漏接收

}

}

*P_INT_Clear=C_IRQ3_EXT1

}

else

{

*P_INT_Clear=C_IRQ3_KEY//IRQ3_KeyWakeUp

}

}

void IRQ1(void) __attribute__ ((ISR))

void IRQ1(void)

{ Time++//计数以获得脉冲宽度

*P_INT_Clear=C_IRQ1_TMA//clear INT flag

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8279528.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存