|
系统框架图
主函数
#include "rain.h"
#include "delay.h"
#include "sys.h"
#include "timer.h"
//#include "usart.h"
#include "dht11.h"
#include "oled.h"
#include "stdio.h"
#include "sg90.h"
#include "lanya.h"
#include "mq2.h"
#include "sr501.h"
#include "beep.h"
//u8 alarmFlag = 0;//是否报警的标志
//u8 alarm_is_free = 10;//报警器是否被手动操作,如果被手动操作即设置为0
volatile uint16_t data;//为了保存串口的数据 volatile 代表变量是易变的
u8 humidityH; //湿度整数部分
u8 humidityL; //湿度小数部分
u8 temperatureH; //温度整数部分
u8 temperatureL;
int i=0;
u8 buf[5];
//温度小数部分
extern char oledBuf[20];
int fputc(int ch,FILE* f)
{
USART_SendData(USART3,ch);
while( USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET );//等待数据发送完成
return ch;
}
int main(void)
{
HC_SR501Configuration();
RAIN_Init();
BEEP_Init();
MQ2_Init();
delay_init();
usart3_init();
DHT11_Init();
SG90_pwm_init();
OLED_Init();
OLED_ColorTurn(0);
OLED_DisplayTurn(0);
TIM2_Int_Init(4099,7199);
while(1)
{
DHT11_Read_Data(&humidityH,&humidityL,&temperatureH,&temperatureL);
//手机控制模式:1、2、3、4、5
if(data ==0X01)//如果收到0x01,手动开窗户
{
TIM_SetCompare3(TIM3, 175);//开窗
}
else if(data==0x02)//手动关窗
{
TIM_SetCompare3(TIM3, 195);//关?
}
else if(data==0x03)//自动模式
{
if(MQ2 == 0)//有害气体,一级优先开窗
{
TIM_SetCompare3(TIM3, 175);//开窗
BEEP_bi3();
printf("可燃气体超标 \n");
}
else
{
if(HC_SR501 == 1)//有人靠近,二级优先关窗
{
TIM_SetCompare3(TIM3, 195);//关窗
BEEP_bi1();
printf("注意窗边 \n");
delay_ms(500);
}
else
{
if(RAIN1 == 0)//外面下雨,三级优先关窗
{
TIM_SetCompare3(TIM3, 195);//关窗
}
else
{
if(humidityH >= 70)//如果湿度大于70
{
TIM_SetCompare3(TIM3, 195);//关?
}
else
TIM_SetCompare3(TIM3, 175);//开窗
}
}
}
}
else if(data ==0X04)//如果收到0x04,读取温度
{
printf("温度=%d.%d \n",temperatureH,temperatureL);//中文输出蓝牙采用gbk
delay_ms(1500);
}
else if(data ==0X05)//如果收到0x05,读取湿度
{
printf("湿度=%d.%d \n",humidityH,humidityL);
delay_ms(1500);
}
else if(data !=1|2|4|5 )
{
//上电默认自动
if(MQ2 == 0)//有害气体,一级优先开窗
{
TIM_SetCompare3(TIM3, 175);//开窗
BEEP_bi3();
printf("可燃气体超标 \n");
}
else
{
if(HC_SR501 == 1)//有人靠近,二级优先关窗
{
delay_ms(1000);
if(HC_SR501 == 1)//有人靠近,二级优先关窗
{
TIM_SetCompare3(TIM3, 195);//关窗
BEEP_bi1();
printf("注意窗边 \n");
delay_ms(500);
}
}
else
{
if(RAIN1 == 0)//外面下雨,三级优先关窗
{
TIM_SetCompare3(TIM3, 195);//关窗
}
else
{
if(humidityH >= 70)//如果湿度大于70
{
TIM_SetCompare3(TIM3, 195);//关?
}
else
TIM_SetCompare3(TIM3, 175);//开窗
}
}
}
}
}
}
//}
void USART3_IRQHandler(void)
{
uint16_t n;//为了接收数据
//判断中断是否发生
if( USART_GetITStatus(USART3,USART_IT_RXNE) != RESET )//代表发生
{
//处理数据(一般都是为了接收数据)
n = USART_ReceiveData(USART3);//通过串口3接受数据
data = n;
USART_ClearITPendingBit(USART3 ,USART_IT_RXNE);
}
}
原理图: 无
仿真: 无
APP:无
Keil代码下载:
程序.7z
(210.87 KB, 下载次数: 38)
|
评分
-
查看全部评分
|