找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2068|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stm32c8t6智能窗戶控制系統(tǒng)代碼流程圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

系統(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)

1681871704160.jpg (56.01 KB, 下載次數(shù): 98)

手機(jī)操作流程

手機(jī)操作流程

1681871640509.jpg (62.5 KB, 下載次數(shù): 90)

程序流程圖

程序流程圖

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1102334 發(fā)表于 2023-12-24 10:30 | 只看該作者
可惜沒有APP
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表