仔细看这块板子的外设中还蕴藏这两个东西,一个红外发射管,一个是红外接收管。我们可以利用这两个管子做遥控器了。
原理图上的管脚。
我们利用irm例程中的ask例程。
我们都知道红外发射需要载波的,这里使用了定时器进行发生。
其发射例子比较简单,就是一发一收的,所以我们用手机可以开摄像头观察。
然后我们在其基础上进行修改,主要就是按照自己电器需要的逻辑进行变换。
uint8_t AUX_ON[13]={0xC3,0x97,0xE0,0x00,0xA0,0x00,0x20,0x00,0x00,0x20,0x00,0x05,0x00};
void irm_start()
{
IRM_WriteBit(BOARD_IRM_PORT, 1u);
delay_ms(9);
IRM_WriteBit(BOARD_IRM_PORT, 0u);
delay_us(4500);
}
void irm_stop()
{
IRM_WriteBit(BOARD_IRM_PORT, 1u);
delay_us(900);
IRM_WriteBit(BOARD_IRM_PORT, 0u);
}
void irm_write_0()
{
IRM_WriteBit(BOARD_IRM_PORT, 1u);
delay_us(560);
IRM_WriteBit(BOARD_IRM_PORT, 0u);
delay_us(560);
}
void irm_write_1()
{
IRM_WriteBit(BOARD_IRM_PORT, 1u);
delay_us(560);
IRM_WriteBit(BOARD_IRM_PORT, 0u);
delay_us(1690);
}
void irm_send(uint8_t *s,int n)
{
uint8_t i,j,temp;
irm_start();
for(i=0;i<n;i++)
{
for(j=0;j<8;j++)
{
temp=(s[i]>>j)&0x01;
if(temp==0)//发射0
{
irm_write_0();
}
if(temp==1)//发射1
{
irm_write_1();
}
}
}
irm_stop();
}
void AUX_SET_HOT()
{
uint8_t i;
uint8_t checksum = 0;
uint8_t checksum_Two = 0;
for (i = 0; i < 12; i++)
{
checksum += AUX_ON[i];
}
AUX_ON[12] = checksum;
irm_send(AUX_ON,13);
}
我设备的协议这样,所以就按照上面进行发送即可,我们可以通过逻辑分析仪看其状态。
整个发送流程都是按照上面来的。
其方波频率也是对的,所以测试也是可以通过的。
|