【EV Board (MM32L0136C7P)测评】红外遥控器完整作品
本次开发板提供的丰富外设还未体验完,暂时就把自己体验的几个外设功能给完善了下,然后通过一些外设做了一个遥控器的功能,同时兼具温湿度传感器的显示功能。最主要的是这个液晶显示,目前是段码屏。所以我们可以显示一些字母还有特殊定制的字符。
void LCD_DisplayDataUpdate(void)
{
static u32 TemValue1,RhValue1;
t++;
if(t<15)
{
TemValue1 = TemValue*100;
LCD_DisplayNumber1(0, ' ', 0);
LCD_DisplayNumber1(1, ' ', 0);
LCD_DisplayNumber1(2, '0' + ((TemValue1 / 1000) % 10), 0);
LCD_DisplayNumber1(3, '0' + ((TemValue1 / 100 ) % 10), 1);
LCD_DisplayNumber1(4, '0' + ((TemValue1 / 10 ) % 10), 0);
LCD_DisplayNumber1(5, '0' + ((TemValue1 / 1 ) % 10), 0);
LCD_DisplayUnit(4,1);
LCD_DisplayNumber2(0, ' ', 0);
}
else if(t<30)
{
RhValue1 = RhValue*100;
LCD_DisplayNumber1(0, 'H', 0);
LCD_DisplayNumber1(1, ' ', 0);
LCD_DisplayNumber1(2, '0' + ((RhValue1 / 1000) % 10), 0);
LCD_DisplayNumber1(3, '0' + ((RhValue1 / 100 ) % 10), 1);
LCD_DisplayNumber1(4, '0' + ((RhValue1 / 10 ) % 10), 0);
LCD_DisplayNumber1(5, '0' + ((RhValue1 / 1 ) % 10), 0);
LCD_DisplayUnit(4,0);
LCD_DisplayNumber2(0, ' ', 0);
}
else
{
t=0;
}
}
void LCD_Show_Heating_Temp(uint8_t temp)
{
LCD_DisplayNumber1(0, ' ', 0);
LCD_DisplayNumber1(1, 'H', 0);
LCD_DisplayNumber1(2, '-', 0);
LCD_DisplayNumber1(3, '0' + ((temp / 10 ) % 10), 0);
LCD_DisplayNumber1(4, '0' + ((temp / 1 ) % 10), 0);
LCD_DisplayNumber1(5, 'C', 0);
LCD_DisplayUnit(4,0);
}
void LCD_Show_Refrigeration_Temp(uint8_t temp)
{
LCD_DisplayNumber1(0, ' ', 0);
LCD_DisplayNumber1(1, 'C', 0);
LCD_DisplayNumber1(2, '-', 0);
LCD_DisplayNumber1(3, '0' + ((temp / 10 ) % 10), 0);
LCD_DisplayNumber1(4, '0' + ((temp / 1 ) % 10), 0);
LCD_DisplayNumber1(5, 'C', 0);
LCD_DisplayUnit(4,0);
}
void LCD_Show_Wind_Speed(uint8_t Wind_Speed)
{
switch(Wind_Speed)
{
case 0: //自动
{
LCD_DisplayNumber2(0, 'A', 0);
break;
}
case 1: //低速
{
LCD_DisplayNumber2(0, 'L', 0);
break;
}
case 2://中速
{
LCD_DisplayNumber2(0, 'I', 0);
break;
}
case 3://高速
{
LCD_DisplayNumber2(0, 'H', 0);
break;
}
}
}
这里面我用了好几个函数封装了要显示的内容,首先传感器显示数据,保留了两位小数,同时对于其温湿度采用了不同的显示方法,温度由于其段码上有一个字符,所以直接显示字符就行了,湿度我用了最开头一个数码管进行显示H。然后包括后面显示风俗也是一样,用数码管拼凑字母。紧接着的是显示制冷制热模式下的温度。
之后是红外,这个在上篇中说了,产生38Khz方波,然后进行编码。
按键的话只能用前面三个进行测试,最后的和段码屏冲突了,所以我们未使用,不过我们可以用组合按键方式进行新增功能。
if(KEY1&&!KEY2)
{
delay_ms(15);
if(KEY1&&!KEY2) //关机
{
AUX_SET_OFF();
mode = 0;
}
}
else if(KEY1) //制热
{
delay_ms(15);
if(KEY1)
{
send_flag = 1;
mode = 1;
}
}
else if(!KEY2&&!KEY3) //显示温湿度
{
delay_ms(15);
if(!KEY2&&!KEY3)
{
mode = 0;
}
}
else if(!KEY2)//制冷
{
delay_ms(15);
if(!KEY2)
{
send_flag = 1;
mode = 2;
}
}
else if(!KEY3)//设置风速
{
delay_ms(15);
if(!KEY3)
{
send_flag = 1;
if(wind_speed==3)//高速到自动
{
AUX_ON = 0xE0;//自动
wind_speed = 0;
}
else if(wind_speed == 0)
{
AUX_ON = 0x60;//低速
wind_speed = 1;
}
else if(wind_speed == 1)
{
AUX_ON = 0x20;//中速
wind_speed = 2;
}
else if(wind_speed == 2)
{
AUX_ON = 0xA0;//高速
wind_speed = 3;
}
mode = 3;
}
}
所以整个功能就做了5个,分别是制冷制热模式切换,风速大小切换,以及显示温湿度传感器数据,关闭空调。
空调控制还需要进行调温,这个是最主要的功能,调温的话我是采用了上面的滑动变阻器,然后其是接入到了ADC功能里面的,我们把ADC采集数据进行平均,然后就能完成温度调节了。
我把其采集到的值进行了等分,然后只需要除去这个数即可。
ADCVAL = GetAdcAverage(10);
set_temp = ADCVAL/274;
if(temp_change!=set_temp)
{
temp_change = set_temp;
send_flag = 1;
}
这个是代码,首先是采集滤波,然后就是数值改变下才去调整下空调设定温度。
switch(mode)
{
case 0:
{
//IRM_SetIRMData(1u);
SHT20_SoftReset();
SHT20_ReadValues();
LCD_DisplayDataUpdate();
break;
}
case 1: //制热
{
if(send_flag)
{
send_flag = 0;
AUX_ON = ((0x40>>3)+(set_temp))<<3|0x07;
AUX_ON = 0x80;
AUX_SET_HOT();
LCD_Show_Heating_Temp(set_temp+16);
LCD_Show_Wind_Speed(wind_speed);
}
break;
}
case 2: //制冷
{
if(send_flag)
{
send_flag = 0;
AUX_ON = ((0x40>>3)+(set_temp))<<3|0x07;
AUX_ON = 0x20;
AUX_SET_HOT();
LCD_Show_Refrigeration_Temp(set_temp+16);
LCD_Show_Wind_Speed(wind_speed);
}
break;
}
case 3:
{
if(send_flag)
{
send_flag = 0;
AUX_ON = ((0x40>>3)+(set_temp))<<3|0x07;
LCD_Show_Wind_Speed(wind_speed);
AUX_SET_HOT();
}
break;
}
}
整体最后在函数里进行不同,模式切换就完成了。
演示效果放视频中了,如下。
https://www.bilibili.com/video/BV1Je4y1K7fP/?vd_source=897ad85d1724aa2677a99c9a337cf2a5
对着空调实际操作,一下子感觉到效果了 博主强大,感谢分享 楼主这个可以,学习到了 正常情况下红外遥控器的可靠使用距离是多远啊 一般情况下什么原因会导致红外连接的断开呢 红外发送的这个波 是可以通过什么手段进行捕捉呢 使用红外连接发送数据的最快速度是多少啊 一个红外遥控器 可以同时控制多个红外设备吗 红外连接发送数据的最快速度是多少啊 tpgf 发表于 2023-1-5 15:09
正常情况下红外遥控器的可靠使用距离是多远啊
这个传感器很小,还是贴片的,所以估计得一米以内,其实做个多的一般是5个灯,像最早小米出的那种万能遥控器,就是这样,这样基本做到一个屋子里设备都能控制了 Jacquetry 发表于 2023-1-5 17:01
红外连接发送数据的最快速度是多少啊
这个不是看速度的,看协议,协议规定了,就只能按协议速度走,他的38KHZ只是载波 tfqi 发表于 2023-1-5 15:56
一个红外遥控器 可以同时控制多个红外设备吗
可以的,就是你要修改代码了,能做成万能遥控器那种,都需要有对应的红外设备库了 木木guainv 发表于 2023-1-5 15:34
红外发送的这个波 是可以通过什么手段进行捕捉呢
可以用逻辑分析仪看,这个最准确,用手机摄像头只能看他亮了 xiaoqizi 发表于 2023-1-5 15:25
一般情况下什么原因会导致红外连接的断开呢
他这个目前贴片的红外灯,比较受限制,换自己做的板子就会好点,多组红外发射灯就好了
页:
[1]