设为首页 收藏本站
开启辅助访问 切换到宽版

  找回密码
  立即注册

QQ登录

只需一步,快速开始

快捷导航
  • 论坛
  • 问答区
  • 单片机教程
  • 单片机DIY
  • 电子DIY
  • 帮助

热门: 51单片机 | 24小时必答区 | 单片机教程 | 单片机DIY制作 | STM32 | Cortex M3 | 模数电子 | 电子DIY制作 | 音响/功放 | 拆机乐园 | Arduino | 嵌入式OS | 程序设计

搜索
» 论坛 嵌入式/单片机论坛 STM32/8 stm32c8t6智能窗户控制系统代码流程图
返回列表 发新帖
查看: 1305|回复: 1
打印 上一主题 下一主题
收起左侧

stm32c8t6智能窗户控制系统代码流程图

[复制链接]
跳转到指定楼层
楼主
ID:1003388 发表于 2023-4-19 10:35 | 只看该作者 | 只看大图 回帖奖励 | 倒序浏览 | 阅读模式

系统框架图
   主函数
#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, 下载次数: 36)

1681871704160.jpg (56.01 KB, 下载次数: 73)

手机操作流程

手机操作流程

1681871640509.jpg (62.5 KB, 下载次数: 70)

程序流程图

程序流程图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1102334 发表于 2023-12-24 10:30 | 只看该作者
可惜没有APP
回复

使用道具 举报

返回列表 发新帖
高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 小黑屋| 51黑电子论坛 | 51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表