|
1681871547902.jpg (111.89 KB, 下載次數: 53)
下載附件
系統框架圖
2023-4-19 10:32 上傳
系統框架圖
主函數
#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)
2023-4-19 15:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|