打印
[MM32软件]

【EV Board (MM32L0136C7P)测评】红外遥控器完整作品

[复制链接]
1350|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuxiubo|  楼主 | 2022-12-17 13:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本次开发板提供的丰富外设还未体验完,暂时就把自己体验的几个外设功能给完善了下,然后通过一些外设做了一个遥控器的功能,同时兼具温湿度传感器的显示功能。

最主要的是这个液晶显示,目前是段码屏。所以我们可以显示一些字母还有特殊定制的字符。
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[4] = 0xE0;//自动

wind_speed = 0;

}

else if(wind_speed == 0)

{

AUX_ON[4] = 0x60;//低速

wind_speed = 1;

}

else if(wind_speed == 1)

{

AUX_ON[4] = 0x20;//中速

wind_speed = 2;

}

else if(wind_speed == 2)

{

AUX_ON[4] = 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[1] = ((0x40>>3)+(set_temp))<<3|0x07;

AUX_ON[6] = 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[1] = ((0x40>>3)+(set_temp))<<3|0x07;

AUX_ON[6] = 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[1] = ((0x40>>3)+(set_temp))<<3|0x07;

LCD_Show_Wind_Speed(wind_speed);

AUX_SET_HOT();

}

break;

}

}

整体最后在函数里进行不同,模式切换就完成了。
演示效果放视频中了,如下。


使用特权

评论回复
沙发
xld0932| | 2022-12-17 20:02 | 只看该作者
对着空调实际操作,一下子感觉到效果了

使用特权

评论回复
板凳
xu@xupt| | 2022-12-19 10:30 | 只看该作者
博主强大,感谢分享

使用特权

评论回复
地板
szt1993| | 2022-12-21 21:03 | 只看该作者
楼主这个可以,学习到了

使用特权

评论回复
5
tpgf| | 2023-1-5 15:09 | 只看该作者
正常情况下  红外遥控器的可靠使用距离是多远啊

使用特权

评论回复
6
xiaoqizi| | 2023-1-5 15:25 | 只看该作者
一般情况下什么原因会导致红外连接的断开呢

使用特权

评论回复
7
木木guainv| | 2023-1-5 15:34 | 只看该作者
红外发送的这个波 是可以通过什么手段进行捕捉呢

使用特权

评论回复
8
aoyi| | 2023-1-5 15:43 | 只看该作者
使用红外连接发送数据的最快速度是多少啊

使用特权

评论回复
9
tfqi| | 2023-1-5 15:56 | 只看该作者
一个红外遥控器 可以同时控制多个红外设备吗

使用特权

评论回复
10
Jacquetry| | 2023-1-5 17:01 | 只看该作者
红外连接发送数据的最快速度是多少啊

使用特权

评论回复
11
wuxiubo|  楼主 | 2023-1-6 16:59 | 只看该作者
tpgf 发表于 2023-1-5 15:09
正常情况下  红外遥控器的可靠使用距离是多远啊

这个传感器很小,还是贴片的,所以估计得一米以内,其实做个多的一般是5个灯,像最早小米出的那种万能遥控器,就是这样,这样基本做到一个屋子里设备都能控制了

使用特权

评论回复
12
wuxiubo|  楼主 | 2023-1-6 16:59 | 只看该作者
Jacquetry 发表于 2023-1-5 17:01
红外连接发送数据的最快速度是多少啊

这个不是看速度的,看协议,协议规定了,就只能按协议速度走,他的38KHZ只是载波

使用特权

评论回复
13
wuxiubo|  楼主 | 2023-1-6 17:00 | 只看该作者
tfqi 发表于 2023-1-5 15:56
一个红外遥控器 可以同时控制多个红外设备吗

可以的,就是你要修改代码了,能做成万能遥控器那种,都需要有对应的红外设备库了

使用特权

评论回复
14
wuxiubo|  楼主 | 2023-1-6 17:00 | 只看该作者
木木guainv 发表于 2023-1-5 15:34
红外发送的这个波 是可以通过什么手段进行捕捉呢

可以用逻辑分析仪看,这个最准确,用手机摄像头只能看他亮了

使用特权

评论回复
15
wuxiubo|  楼主 | 2023-1-6 17:01 | 只看该作者
xiaoqizi 发表于 2023-1-5 15:25
一般情况下什么原因会导致红外连接的断开呢

他这个目前贴片的红外灯,比较受限制,换自己做的板子就会好点,多组红外发射灯就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

247

帖子

2

粉丝