久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2702|回復: 2
打印 上一主題 下一主題
收起左側

除臭!殺菌等多功能智能健康鞋柜設計,APP無線控制(app源碼+MCU控制源碼+設計說明)

[復制鏈接]
跳轉到指定樓層
樓主
ID:419075 發表于 2019-9-9 11:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*******************************************************************************
1、本工程是GoKit的最新版本工程;
2、mcu開發者可以關心protocol.h 和 protocol.c這兩個文件;
3、用于傳輸的通用協議(非P0),mcu開發者可以最大程度的復用此工程源碼;
4、mcu開發者重點關注protocol.c中的CmdSendMcuP0和CmdReportModuleStatus這兩個函數(需要控制外設和處理外設狀態);
5、其余通用的通訊流程,可以不做改變或者替換改變;
6、有任何問題可以關注機智云開發者論壇;
*******************************************************************************/

#include <stm32f10x.h>
#include "hal_uart.h"
#include "hal_key.h"
//#include "hal_rgb_led.h"
//#include "hal_motor.h"
#include "hal_temp_hum.h"
#include "protocol.h"
//#include "hal_infrared.h"

#include "led.h"
#include "lcd.h"
#include "adc.h"
#include "ds18b20.h"
#include "chinese.h"
#include "pwm.h"
#include "timer.h"
#include "rtc.h"


uint8_t                                                                         get_one_package;                                                        //判斷是否接收到一個完整的串口數據包
uint8_t                                                                         uart_buf[256];                                                                 //串口緩沖區
uint16_t                                                                         uart_Count=0;                                                                        //串口緩沖區數據長度
uint8_t                                                                         cmd_flag =0;                                                                       
uint16_t                                                                         cmd_len =0 ;               
uint8_t                                                                         wait_ack_time;                                                               
uint8_t                                                                         check_status_time;
uint8_t                                                                         report_status_idle_time;
uint32_t                                                                        SN;
uint8_t                                                                         cmd_flag1, cmd_flag2;
uint32_t                                                                        wait_wifi_status;

pro_commonCmd                                                        m_pro_commonCmd;                                                        //通用命令,心跳、ack等可以復用此幀
m2w_returnMcuInfo                                        m_m2w_returnMcuInfo;                                        //返回mcu信息幀
m2w_setModule                                                        m_m2w_setModule;                                                        //配置模塊幀
w2m_controlMcu                                                m_w2m_controlMcu;                                                        //控制命令幀
m2w_mcuStatus                                                        m_m2w_mcuStatus;                                                        //當前最新的mcu狀態幀
m2w_mcuStatus                                                        m_m2w_mcuStatus_reported;                        //上次發送的mcu狀態,當與最新的mcu狀態不同時,需要上報;
w2m_reportModuleStatus                m_w2m_reportModuleStatus;                        //wifi模塊上報狀態幀
pro_errorCmd                                                        m_pro_errorCmd;                                                                //錯誤命令幀



u8                                                        Cleanliness_Data;
u8                                                  DHT11_Read_Data_temperature;
u8                                                         DHT11_Read_Data_humidity;
u16                                     DS18B20_Data;
u16                    Gas_Data;
float              voltage;
float              voltage1;

extern  vu16  ADC_ConvertedValue[1];
                                                               

int        McuStatusInit()
{
        SN = 0;
        cmd_flag1 = 0;
        cmd_flag2 = 0;
        get_one_package = 0;
        uart_Count = 0;
        cmd_flag = 0;
        cmd_len = 0 ;       
        wait_wifi_status = 0;
       
        memset(uart_buf, 0, 256);
       
        //初始化通用命令幀,命令字和sn需要傳入,校驗和發送前計算,其他信息相同;
        memset(&m_pro_commonCmd, 0, sizeof(pro_commonCmd));
        m_pro_commonCmd.head_part.head[0] = 0xFF;
        m_pro_commonCmd.head_part.head[1] = 0xFF;
        m_pro_commonCmd.head_part.len = exchangeBytes(sizeof(pro_commonCmd) - 4);

        //初始化返回mcu信息幀,sn和校驗和需要根據實際填寫;
        memset(&m_m2w_returnMcuInfo, 0, sizeof(m2w_returnMcuInfo));
        m_m2w_returnMcuInfo.head_part.head[0] = 0xFF;
        m_m2w_returnMcuInfo.head_part.head[1] = 0xFF;
        //長度值不包含包頭和長度字段,所以要減去4個字節;
        m_m2w_returnMcuInfo.head_part.len = exchangeBytes(sizeof(m2w_returnMcuInfo) - 4);                       
        m_m2w_returnMcuInfo.head_part.cmd = CMD_GET_MCU_INFO_ACK;
        memcpy(m_m2w_returnMcuInfo.pro_ver, PRO_VER, 8);
        memcpy(m_m2w_returnMcuInfo.p0_ver, P0_VER, 8);
        memcpy(m_m2w_returnMcuInfo.hard_ver, HARD_VER, 8);
        memcpy(m_m2w_returnMcuInfo.soft_ver, SOFT_VER, 8);
        memcpy(m_m2w_returnMcuInfo.product_key, PRODUCT_KEY, 32);
        //binable_time默認0,可以隨時被綁定;
        m_m2w_returnMcuInfo.binable_time = 0;                                                                                                                                               
               
        //初始化mcu狀態幀,sn和校驗和需要根據實際填寫;
        memset(&m_m2w_mcuStatus, 0, sizeof(m2w_mcuStatus));
        m_m2w_mcuStatus.head_part.head[0] = 0xFF;
        m_m2w_mcuStatus.head_part.head[1] = 0xFF;
        m_m2w_mcuStatus.head_part.len = exchangeBytes(sizeof(m2w_mcuStatus) - 4);
//        DHT11_Read_Data((uint8_t *)&(m_m2w_mcuStatus.status_r.temputure), (uint8_t *)&(m_m2w_mcuStatus.status_r.humidity));
//        m_m2w_mcuStatus.status_w.motor_speed = 5;
   DS18B20_Data=DS18B20_Get_Temp();

       
        //初始化配置wifi模塊幀,sn和校驗和需要根據實際填寫;
        memset(&m_m2w_setModule, 0, sizeof(m2w_setModule));
        m_m2w_setModule.head_part.head[0] = 0xFF;
        m_m2w_setModule.head_part.head[1] = 0xFF;
        m_m2w_setModule.head_part.cmd = CMD_SET_MODULE_WORKMODE;
        m_m2w_setModule.head_part.len = exchangeBytes(sizeof(m2w_setModule) - 4);

        //初始化錯誤命令幀,sn和校驗和需要根據實際填寫;
        memset(&m_pro_errorCmd, 0, sizeof(pro_errorCmd));
        m_pro_errorCmd.head_part.head[0] = 0xFF;
        m_pro_errorCmd.head_part.head[1] = 0xFF;
        m_pro_errorCmd.head_part.cmd = CMD_MODULE_CMD_ERROR_ACK;
        m_pro_errorCmd.head_part.len = exchangeBytes(sizeof(pro_errorCmd) - 4);
       
        return 0;
}

int main(void)
{
       
        u16 pwm1=175;      
        u16 pwm4=175;
        char i=0;
        u8 t=0,t1=0,t2=0,t3=0,t4=0;
       
        short temperature1;
       
        //系統初始化
        SystemInit();
        UART_Configuration();
        delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
        KEY_GPIO_Init();
        TIM3_Int_Init(100,7199);     //20ms
        TIM4_PWM_Init(199,7200);//PWM頻率=50hz  
       
        //應用初始化,包括電機、LED、溫濕度、紅外;
//        Motor_Init();       
//        RGB_LED_Init();
        DHT11_Init();
//        IR_Init();
        LED_Init();
        LCD_Init();
        Adc_Init();
        DS18B20_Init();                          //RTC初始化
        RTC_Init();                                  //RTC初始化
        TEST_FONT();//中文顯示
        LCD_Scan_Dir(0);//橫屏
       
        //初始化各類型數據幀
        McuStatusInit();       
       
        POINT_COLOR=0X841F;//設置字體顏色

        while(1)
        {

                //處理來自于串口的數據幀
                MessageHandle();
               
                //處理來自于按鍵的事件
                KeyHandle();                

                //檢查系統最新狀態
                CheckStatus();       

//                                                         if(t3%10==0)//每100ms讀取一次               

//                {       
//                        LCD_ShowString(16,250,200,16,16,"Vol:     V");         //一個字符占8位
//                        POWER(&voltage);
//                        LCD_ShowNum(50,250,voltage,4,16);        //顯示正數部分       
////                        POWER1(&voltage1);                       
////            LCD_ShowNum(40,270,voltage1,2,16);        //顯示小數部分
//                                        if(voltage<3.3)                       
//                        {
//                       
//                        LED3=1;
//                       
//                        }else LED3=0;                                                                                 
////                        if(voltage1<3.3)                       
////                        {                       
////                        LED1=0;
////                       
////                        }else LED1=1;
//                       
//                                }                                  
//                 delay_ms(10);
//                t3++;
//                if(t3==20)
//                {
//                        t=0;
//       
//                }
               
               
               
                                                 if(t%10==0)//每100ms讀取一次               

                {                
                        LCD_ShowString(0+110+16,150,150,16,16,"C");         
      LCD_ShowString(0+110+16,170,170,16,16,"%  ");                                                                           
                        DHT11_Read_Data(&DHT11_Read_Data_temperature,&DHT11_Read_Data_humidity);                //讀取溫濕度值                                            
                        LCD_ShowNum(40+50+16,150,DHT11_Read_Data_temperature,2,16);                //顯示溫度                             
                        LCD_ShowNum(40+50+16,170,DHT11_Read_Data_humidity,2,16);                        //顯示濕度         
                       
                        if(DHT11_Read_Data_humidity>43)   //濕度
                        {
                       
                                JDQ0=1;
                       
                        }        else
       
                if(!(m_w2m_controlMcu.status_w.cmd_byte  == 0x00) )       
                { if(        m_w2m_controlMcu.status_w.cmd_byte  == 0x08)
                  {
      if(DHT11_Read_Data_temperature<35)
                        {
                       
                        JDQ0=1;
                                while(DHT11_Read_Data_temperature>40)
                                        break;
                       
                        }        else JDQ0=0;               
                       
                   }
                        if(m_w2m_controlMcu.status_w.cmd_byte == 0x04)
                               
                        JDQ0=1;
                       
                       
                 }else JDQ0=0;
                         
                }                                  
                 delay_ms(10);
                t++;
                if(t==20)
                {
                        t=0;
       
                }

                                //*********************DS18B20****************//
                  LCD_ShowString(24+32+70+16,190,200,16,16,".");         //一個字符占8位
                        LCD_ShowString(40+32+70+16,190,200,16,16,"%");         //一個字符占8位
               
                if(t1%10==0)//每100ms讀取一次
                {                                                                          
                        Hal_ReadAirMQxxData(&Gas_Data);    //refrigerator_gas_Data=Get_Adc_Average(ADC_Channel_1,10);
                       
                                LCD_ShowNum(0+40+70+16,190,Gas_Data/10,2,16);        //顯示正數部分            
                           LCD_ShowNum(0+64+70+16,190,Gas_Data%10,1,16);        //顯示小數部分

     if((Gas_Data/10)>2|(m_w2m_controlMcu.status_w.cmd_byte == 0x02))
                        {
                       
                        JDQ1=1;       
      Cleanliness_Data=0;       
                        LCD_ShowString(120,130,200,16,16,"Dirty ");         //一個字符占8位       
                        }       
                        else JDQ1=0,Cleanliness_Data=1 ,LCD_ShowString(120,130,200,16,16,"Clean");                 //一個字符占8位                                      
                }                                  
                 delay_ms(10);
                t1++;
                if(t1==20)
                {
                        t1=0;
       
                }

                                //*********************DS18B20****************//
                  LCD_ShowString(24+56+40,210,200,16,16,".");         //一個字符占8位
                        LCD_ShowString(40+56+40,210,200,16,16,"C");         //一個字符占8位
//                LCD_ShowString(0,180,200,16,16,"E_TEMP:");         //一個字符占8位
                        if(t2%10==0)//每100ms讀取一次
                {                                                                          
                        temperature1=DS18B20_Get_Temp();       
                        if(temperature1<0)
                        {
                                LCD_ShowChar(0+56+40,210,'-',16,0);                        //顯示負號
                                temperature1=-temperature1;                                        //轉為正數
                        }else LCD_ShowChar(0+56+40,210,' ',16,0);                        //去掉負號
                        LCD_ShowNum(0+64+40,210,temperature1/10,2,16);        //顯示正數部分            
                           LCD_ShowNum(0+88+40,210,temperature1%10,1,16);        //顯示小數部分                   
                }                                  
                 delay_ms(10);
                t2++;
                if(t2==20)
                {
                        t2=0;
       
                }
       

               
                if(t4!=calendar.sec)
                {
                       
//                        LCD_ShowString(20,270,200,16,16,"    -   -  ");          
            LCD_ShowString(190,0,200,16,12,"  :  :  ");                  
                        t=calendar.sec;
//                        LCD_ShowNum(16,270,calendar.w_year,4,16);                                                                          
//                        LCD_ShowNum(66,270,calendar.w_month,2,16);                                                                          
//                        LCD_ShowNum(96,270,calendar.w_date,2,16);         
                        switch(calendar.week)
                        {
                                case 0:
                                        LCD_ShowString(190,12,200,16,12,"Sunday   ");
                                        break;
                                case 1:
                                        LCD_ShowString(190,12,200,16,12,"Monday   ");
                                        break;
                                case 2:
                                        LCD_ShowString(190,12,200,16,12,"Tuesday  ");
                                        break;
                                case 3:
                                        LCD_ShowString(190,12,200,16,12,"Wednesday");
                                        break;
                                case 4:
                                        LCD_ShowString(190,12,200,16,12,"Thursday ");
                                        break;
                                case 5:
                                        LCD_ShowString(190,12,200,16,12,"Friday   ");
                                        break;
                                case 6:
                                        LCD_ShowString(190,12,200,16,12,"Saturday ");
                                        break;  
                        }
                        LCD_ShowNum(190,0,calendar.hour,2,12);                                                                          
                        LCD_ShowNum(207,0,calendar.min,2,12);                                                                          
                        LCD_ShowNum(225,0,calendar.sec,2,12);
                }       
//                delay_ms(10);               
               
               
        }                               
}






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

使用道具 舉報

沙發
ID:1 發表于 2019-9-9 21:58 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

板凳
ID:389529 發表于 2024-7-17 08:47 | 只看該作者
有源碼嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线成人www免费观看视频 | 国产亚洲一区二区三区在线 | 午夜精品视频在线观看 | 国产精品免费高清 | 高清欧美性猛交xxxx黑人猛交 | 久色视频在线 | 午夜成人免费视频 | 国产日韩精品视频 | 午夜激情小视频 | 久久久2o19精品 | 91精品一区二区三区久久久久 | 91精品国产一区二区三区 | 亚洲中国字幕 | 国产成人99久久亚洲综合精品 | 毛片免费视频 | 99国内精品久久久久久久 | 91精品麻豆日日躁夜夜躁 | 国产一区二区在线免费观看 | 国产精品不卡 | 日本在线中文 | 国产1区 | 日韩精品无码一区二区三区 | 狠狠干狠狠操 | av影片在线 | 成人三级网址 | 亚洲视频在线观看一区二区三区 | 欧美大片一区二区 | 精品无码久久久久久国产 | 美女黄视频网站 | 在线中文字幕亚洲 | 91精品国产乱码久久久久久久久 | 色偷偷888欧美精品久久久 | 国产欧美精品一区二区 | 久久99精品久久久久久 | 日本欧美在线视频 | 中文字幕 在线观看 | 爱爱免费视频网站 | 成人午夜电影网 | 免费一级片 | 91麻豆精品国产91久久久更新资源速度超快 | 久久久久91 |