1、准备开发板
这里我选用了一块网红开发板:”小熊派“,这款板子的人气比较高,还是全国大学生物联网设计竞赛(华为杯)的华为竞赛开发板,我个人也比较喜欢用这款板子,这款板子在放在纸箱吃灰半年之后,被我重新拿了起来,并想借此写博客的机会,整理一下自己的代码。
开发板功能区分布图
开发板俯视图
前面我们一共学到了LED、按键、串口收发、ADC、定时器、蜂鸣器、LCD
现在我们将这些外设利用起来做一个综合例程,学到这里你就算是基础入门了,现在你缺少的就是实际的应用,你可以跟着把我的代码敲一遍,这更有利于你的学习。
2、应用场景
因为我在家煮饭做菜的时候经常会搞得厨房乌烟瘴气,而且做菜的时候总是忘记打开抽油烟机。所以粗心大意的我决定做这套系统,来提醒我打开抽油烟机,还厨房一个干净的环境。
3、市场前景
啥?!做个东西都要市场前景?没前景俺还不做了?!给爷爬!!!
4、商业价值
我觉得还是有一点点价值的吧,毕竟一个家就有一个厨房。(好吧,我瞎编凑字数的【/狗头】)
5、在MDK中编写代码
什么?要我从头写完所有代码?不可能的,兄弟。代码和文件是我直接复制粘贴过来的,除了main.c,其他文件我压根都没动过,自己回头看我前面几篇教程去!!!
在main.c中编写以下代码
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "key.h"
#include "lcd.h"
float Smoke_UT = 100;
void Info_Alter(char *info)
{
char *uwRet;
uwRet = strstr(info, "UT");
if (uwRet != NULL)
{
uwRet = strchr(uwRet, ':');
if (uwRet != NULL)
{
uwRet++;
printf("设定烟雾浓度阈值为:%s\r\n",uwRet);
Smoke_UT = atof(uwRet);
}
}
}
int main(void)
{
unsigned char key;
float smoke_value;
char LCD_Str[15];
HAL_Init();
uint32_t smoke_time = 0;
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_ADC1_Init();
MX_SPI2_Init();
MX_TIM2_Init();
MX_TIM16_Init();
USART_Interupt_Enable();
TIM_Interupt_Enable();
LCD_Init();
LCD_Clear(BLUE);
LCD_ShowString(65, 50+24+32, 240, 32, 32, "Wecome!");
LCD_Draw_Circle(120, 120, 60);
LCD_Draw_Circle(120, 120, 80);
LCD_Draw_Circle(120, 120, 100);
LCD_Draw_Circle(120, 120, 120);
HAL_Delay(500);
LCD_Clear(BLACK);
LCD_ShowString(10, 10, 240, 24, 24, "Monitoring system");
LCD_Draw_Circle(120, 120, 85);
while (1)
{
if(time2Count - smoke_time >= 1000)
{
smoke_time = time2Count;
smoke_value = (float)ADC_GetValue()/4096*3.3;
sprintf(LCD_Str,"smoke:%0.2f",smoke_value);
LCD_ShowString(40, 50+24+32, 240, 32, 32, LCD_Str);
printf("smoke_value:%f\r\n",smoke_value);
if(smoke_value > Smoke_UT)
{
printf("报警中...");
BEEP_ON;
}
else
{
BEEP_OFF;
}
}
key = KEY_Scan(0);
if(key == 1)
{
LED_Set(LED_ON)
}
else if(key == 2)
{
LED_Set(LED_OFF)
}
if(usart1Info.InfBit.finishFlag == REC_OK)
{
usart1Info.rxBuf[usart1Info.InfBit.dataLen++] = '\0';
printf("usart1Info.rxBuf:%s\r\n",usart1Info.rxBuf);
Info_Alter((char*)usart1Info.rxBuf);
usart1Info.InfBit.finishFlag = REC_WAIT;
usart1Info.InfBit.dataLen = 0;
}
}
}
6、实验现象
实现的功能 |
---|
1、给单片机上电会显示欢迎界面然后进入烟雾浓度显示界面 | 2、按下按键1控制LED点亮,按下按键2控制LED熄灭 | 3、ADC采集烟雾传感器浓度,并显示到LCD屏幕上 | 4、通过串口助手向单片机发送阈值设置指令,设置阈值成功后会给串口助手返回修改成功信息 | 5、烟雾浓度超过所设置的阈值时,触发蜂鸣器报警 |
|