1.紅外線(xiàn)簡(jiǎn)介
在光譜中波長(zhǎng)自760nm至400um的電磁波稱(chēng)為紅外線(xiàn),它是一種不可見(jiàn)光。目前幾乎所有的視頻和音頻設(shè)備都可以通過(guò)紅外遙控的方式進(jìn)行遙控,比如電視機(jī)、空調(diào)、影碟機(jī)等,都可以見(jiàn)到紅外遙控的影子。這種技術(shù)應(yīng)用廣泛,相應(yīng)的應(yīng)用器件都十分廉價(jià),因此紅外遙控是我們?nèi)粘TO(shè)備控制的理想方式。
2.美的空調(diào)紅外遙控器協(xié)議R05D
美的空調(diào)紅外遙控器采用R05D格式,載波頻率為38KHZ。
數(shù)據(jù)格式:引導(dǎo)碼+48位數(shù)據(jù)+分隔碼+48位數(shù)據(jù)(LAA’BB’CC’ S LAA’BB’CC’)
L為引導(dǎo)碼;
ABC為實(shí)際數(shù)據(jù),A’為A的反碼,B’為B的反碼,C’為C的反碼;
S為分隔碼;
第二幀數(shù)據(jù)和第一幀一樣;
L引導(dǎo)碼:4.5ms低電平+4.5ms高電平(以解析方分析,編碼方剛好相反,下面不再概述)
數(shù)據(jù)A:A為識(shí)別碼(A=10110010=0xB2,預(yù)留方案時(shí)A=10110111=0xB7)
數(shù)據(jù)B
數(shù)據(jù)C
關(guān)機(jī)鍵值
? 關(guān)機(jī)為固定編碼鍵值:
??A=1011 0010 --0xB2
??B=0111 1011 --0x7B
??C=1110 0000 --0xE0
數(shù)據(jù)0格式
數(shù)據(jù)1格式
分隔碼
完整時(shí)序圖
3.軟件設(shè)計(jì)
??本次采用外部中斷+定時(shí)器方式完成紅外數(shù)據(jù)解析。
??1.紅外數(shù)據(jù)解析程序
/*********紅外線(xiàn)初始化************
**
**REMOTE_IN --PB9
**
***********************************/
void HS0038_Init(void)
{
RCC->APB2ENR|=1<<3;//PB
GPIOB->CRH&=0xFFFFFF0F;
GPIOB->CRH|=0x00000080;
EXTI_Config(GPIO_B,9,EXTI_FTSR);//下將沿觸發(fā)
STM32_NVIC_SetPriority(EXTI9_5_IRQn,0,0);//設(shè)置優(yōu)先級(jí)
TIMx_Init(TIM1,72,65535);//定時(shí)器1初始化
}
/*************獲取高電平時(shí)間****************/
u16 Infrared_GetTimeH(void)
{
TIM1->CNT=0;//清空計(jì)數(shù)器值
TIM1->CR1|=1<<0;
while(REMOTE_IN);//等待引腳拉低
TIM1->CR1&=~(1<<0);
return TIM1->CNT;
}
/******************獲取低電平時(shí)間**************/
u16 Infrared_GetTimeL(void)
{
TIM1->CNT=0;//清空計(jì)數(shù)器值
TIM1->CR1|=1<<0;
while(REMOTE_IN==0);//等待引腳拉高
TIM1->CR1&=~(1<<0);
return TIM1->CNT;
}
//美的空調(diào)17~30℃數(shù)據(jù)順序排放
const char r05d_temp[15]={0,1,3,2,6,7,5,4,12,13,9,8,10,11,14};//溫度數(shù)據(jù),17~30
u32 infrared_data=0;//保存解析的32位數(shù)據(jù)
u8 infrared_stat=0;//解析成功標(biāo)志位
u8 infrared_buff[6]={0};
/*******EXTI5~9中斷服務(wù)函數(shù)**********/
void EXTI9_5_IRQHandler(void)
{
u16 time;
u8 i=0,j=0;
EXTI->PR|=1<<9;//清除標(biāo)志位
/*1.接收引導(dǎo)碼:4.5ms低電平+4.5ms高電平*/
time=Infrared_GetTimeL();
if(time<=3500 || time>=5500)return;
time=Infrared_GetTimeH();
if(time<3500 || time>5500)return ;
for(i=0;i<6;i++)
{
for(j=0;j<8;j++)
{
time=Infrared_GetTimeL();//間隔碼:540us低電平
if(time<350 || time>650)return ;
time=Infrared_GetTimeH();
if(time>=1550 && time<=1850)
{
infrared_buff[i]<<=1;
infrared_buff[i]|=0x01;
}
else if(time>=420 && time<=700)
{
infrared_buff[i]<<=1;
}
else return ;
}
}
infrared_stat=1;//數(shù)據(jù)解析完成
}
2.主函數(shù)
int main()
{
u8 i=0;
u8 wind;
u8 mode;
u8 temp;
Beep_Init();
Led_Init();
Key_Init();
u8 data[6];
Usartx_Init(USART1,115200,72);
HS0038_Init();
while(1)
{
if(infrared_stat==1)
{
BEEP=1;
Delay_Ms(50);
BEEP=0;
for(i=0;i<6;i++)
{
if(data[i]!=infrared_buff[i])break;
}
if(i!=6)
{
for(i=0;i<6;i++)
{
data[i]=infrared_buff[i];
}
//printf("data:%#xrn",infrared_data);
if(data[2]==0x7B && data[4]==0xE0)
{
printf("關(guān)機(jī)rn");
}
else if(data[2]==0x6b && data[4]==0xE0)
{
printf("左右掃風(fēng)rn");
}
else if(data[0]==0xb5 && data[2]==0xf5)//其它
{
}
else
{
wind=(data[2]>>5)&0x7;//風(fēng)速
mode=(data[4]>>2)&0x3;//模式
temp=(data[4]>>4)&0xf;//溫度
//printf("風(fēng)速:%drn",wind);
//printf("模式:%drn",mode);
//printf("溫度:%#xrn",temp);
if(wind==WIND_1)printf("自動(dòng),");
else if(wind==WIND_2)printf("低風(fēng),");
else if(wind==WIND_3)printf("中風(fēng),");
else if(wind==WIND_4)printf("高風(fēng),");
else if(wind==WIND_5)printf("固定風(fēng),");
if(mode==MODE_1)printf("自動(dòng),");
else if(mode==MODE_2)printf("制冷,");
else if(mode==MODE_3 && temp==T_31)printf("送風(fēng),");
else if(mode==MODE_3)printf("抽濕,");
else if(MODE_4)printf("制熱,");
for(i=0;i<15;i++)
{
if(temp==r05d_temp[i])printf("溫度:%drn",17+i);
}
}
}
infrared_stat=0;
}
}
}
審核編輯:湯梓紅
-
空調(diào)
+關(guān)注
關(guān)注
11文章
1228瀏覽量
58586 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
355985 -
美的
+關(guān)注
關(guān)注
13文章
468瀏覽量
37614 -
紅外遙控器
+關(guān)注
關(guān)注
3文章
133瀏覽量
21673
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論