|
1681871547902.jpg (111.89 KB, 下載次數(shù): 53)
下載附件
系統(tǒng)框架圖
2023-4-19 10:32 上傳
系統(tǒng)框架圖
主函數(shù)
#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;//是否報(bào)警的標(biāo)志
//u8 alarm_is_free = 10;//報(bào)警器是否被手動(dòng)操作,如果被手動(dòng)操作即設(shè)置為0
volatile uint16_t data;//為了保存串口的數(shù)據(jù) volatile 代表變量是易變的
u8 humidityH; //濕度整數(shù)部分
u8 humidityL; //濕度小數(shù)部分
u8 temperatureH; //溫度整數(shù)部分
u8 temperatureL;
int i=0;
u8 buf[5];
//溫度小數(shù)部分
extern char oledBuf[20];
int fputc(int ch,FILE* f)
{
USART_SendData(USART3,ch);
while( USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET );//等待數(shù)據(jù)發(fā)送完成
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);
//手機(jī)控制模式:1、2、3、4、5
if(data ==0X01)//如果收到0x01,手動(dòng)開窗戶
{
TIM_SetCompare3(TIM3, 175);//開窗
}
else if(data==0x02)//手動(dòng)關(guān)窗
{
TIM_SetCompare3(TIM3, 195);//關(guān)?
}
else if(data==0x03)//自動(dòng)模式
{
if(MQ2 == 0)//有害氣體,一級(jí)優(yōu)先開窗
{
TIM_SetCompare3(TIM3, 175);//開窗
BEEP_bi3();
printf("可燃?xì)怏w超標(biāo) \n");
}
else
{
if(HC_SR501 == 1)//有人靠近,二級(jí)優(yōu)先關(guān)窗
{
TIM_SetCompare3(TIM3, 195);//關(guān)窗
BEEP_bi1();
printf("注意窗邊 \n");
delay_ms(500);
}
else
{
if(RAIN1 == 0)//外面下雨,三級(jí)優(yōu)先關(guān)窗
{
TIM_SetCompare3(TIM3, 195);//關(guān)窗
}
else
{
if(humidityH >= 70)//如果濕度大于70
{
TIM_SetCompare3(TIM3, 195);//關(guān)?
}
else
TIM_SetCompare3(TIM3, 175);//開窗
}
}
}
}
else if(data ==0X04)//如果收到0x04,讀取溫度
{
printf("溫度=%d.%d \n",temperatureH,temperatureL);//中文輸出藍(lán)牙采用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 )
{
//上電默認(rèn)自動(dòng)
if(MQ2 == 0)//有害氣體,一級(jí)優(yōu)先開窗
{
TIM_SetCompare3(TIM3, 175);//開窗
BEEP_bi3();
printf("可燃?xì)怏w超標(biāo) \n");
}
else
{
if(HC_SR501 == 1)//有人靠近,二級(jí)優(yōu)先關(guān)窗
{
delay_ms(1000);
if(HC_SR501 == 1)//有人靠近,二級(jí)優(yōu)先關(guān)窗
{
TIM_SetCompare3(TIM3, 195);//關(guān)窗
BEEP_bi1();
printf("注意窗邊 \n");
delay_ms(500);
}
}
else
{
if(RAIN1 == 0)//外面下雨,三級(jí)優(yōu)先關(guān)窗
{
TIM_SetCompare3(TIM3, 195);//關(guān)窗
}
else
{
if(humidityH >= 70)//如果濕度大于70
{
TIM_SetCompare3(TIM3, 195);//關(guān)?
}
else
TIM_SetCompare3(TIM3, 175);//開窗
}
}
}
}
}
}
//}
void USART3_IRQHandler(void)
{
uint16_t n;//為了接收數(shù)據(jù)
//判斷中斷是否發(fā)生
if( USART_GetITStatus(USART3,USART_IT_RXNE) != RESET )//代表發(fā)生
{
//處理數(shù)據(jù)(一般都是為了接收數(shù)據(jù))
n = USART_ReceiveData(USART3);//通過串口3接受數(shù)據(jù)
data = n;
USART_ClearITPendingBit(USART3 ,USART_IT_RXNE);
}
}
原理圖: 無
仿真: 無
APP:無
Keil代碼下載:
程序.7z
(210.87 KB, 下載次數(shù): 38)
2023-4-19 15:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|