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

QQ登錄

只需一步,快速開始

帖子
查看: 2014|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32f1+ds18b02+bh1750+loed+water sensor+APP接收數(shù)據(jù)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:819146 發(fā)表于 2022-6-9 15:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "stm32f10x.h"
#include "bsp_iic.h"
#include "bsp_systick.h"
#include "bsp_oled.h"
#include "bsp_bh1750.h"
#include "bsp_usart.h"
#include "bsp_ds18b20.h"
#include "bsp_default.h"
#include "bsp_exti.h"
#include "bsp_beep.h"
#include "bsp_led.h"
#include "bsp_adc.h"

void Start_Display (void);  //開機(jī)顯示函數(shù)
void Display (void);   //顯示函數(shù) (溫度,光強(qiáng)度,液位)
void Display_T (float avl);  //顯示函數(shù) (溫度預(yù)設(shè)值)
void Display_I (float avl);  //顯示函數(shù) (光強(qiáng)度預(yù)設(shè)值)
void Display_L (float avl);  //顯示函數(shù) (液位預(yù)設(shè)值)

void LY_SentData (USART_TypeDef* pUSARTx);  //藍(lán)牙發(fā)送函數(shù)

extern float result_lx;
extern float val;      
float temp = 0;
extern float TempPresets;   //預(yù)設(shè)溫度
extern float IlluPresets;   //預(yù)設(shè)光照度
extern float LevelPresets; //預(yù)設(shè)液位
extern uint8_t flag;    //加標(biāo)志位
extern uint8_t flag1;   //減標(biāo)志位
uint8_t T_flag = 0;     //溫度預(yù)設(shè)標(biāo)志位
uint8_t I_flag = 0;     //光強(qiáng)度預(yù)設(shè)標(biāo)志位
uint8_t L_flag = 0;     //液位預(yù)設(shè)標(biāo)志位
uint8_t uc, ucDs18b20Id [8];


int main(void)
{
    I2C_GPIO_Config();  //I2C初始化
    OLED_Init();        //OLED初始化   
    BEEP_Config ();     //蜂鳴器初始化
    LED_GPIO_Config();  //LED初始化
    USART_Config();     //串口初始化
    EXTI_Key_Config();  //按鍵中斷初始化
    ADCx_Init();        //ADC初始化

    OLED_Fill(0xFF);   //全屏點(diǎn)亮
    SysTick_Delay_ms(20);
    OLED_Fill(0x00);   //全屏滅
    SysTick_Delay_ms(20);

    Start_Display ();  //開機(jī)顯示函數(shù)

    while(DS18B20_Init())
      printf("\r\n no ds18b20 exit \r\n");

    printf("\r\n ds18b20 exit \r\n");

    DS18B20_ReadId ( ucDs18b20Id  );           // 讀取 DS18B20 的序列號(hào)

    printf("\r\nDS18B20的序列號(hào)是: 0x");

    for ( uc = 0; uc < 8; uc ++ )             // 打印 DS18B20 的序列號(hào)
     printf ( "%.2x", ucDs18b20Id [ uc ] );

    GY_30_Write_Cmd (0x01);
    GY_30_Write_Cmd (0x10);
    SysTick_Delay_ms(120);

    while(1)
    {
        Display ();   //顯示函數(shù) (溫度,光強(qiáng)度,液位)
        LY_SentData (USART1);  //數(shù)據(jù)發(fā)送函數(shù)

/*-------------------- 報(bào)警處理 -------------------*/      
        Alarm_T_LED_Config (DS18B20_GetTemp_SkipRom (), TempPresets);
        Alarm_I_LED_Config (result_lx, IlluPresets);
        Alarm_L_LED_Config (Level_read(), LevelPresets);
        Alarm_BEEP_Config ();
/*-------------------------------------------------*/   

/*-------------------- 設(shè)置預(yù)設(shè)值 -------------------*/         
        if (T_flag == 1)   Display_T (TempPresets);
        if (I_flag == 1)   Display_I (IlluPresets);
        if (L_flag == 1)   Display_L (LevelPresets);
/*---------------------------------------------------*/         

    }

}

/**
  * @brief  開機(jī)顯示函數(shù)
  * @param  無
  * @retval 無
  */
void Start_Display (void)
{
    static uint8_t ch[] = "Welcome to the monitoring system:";
    static uint8_t ch1[] = "Loading";

    while(1)
    {
        OLED_ShowStr(0, 0,ch,1);
        OLED_ShowStr(0, 3,ch1,2);

        for (uint8_t i=0;i<6;i++)
        {
            SysTick_Delay_ms(500);
            OLED_ShowStr(56+i*8, 3, (unsigned char*)".",2);
        }
        OLED_CLS();   break;
    }   
}

/**
  * @brief  顯示函數(shù) (溫度,光強(qiáng)度,液位值)
  * @param  無
  * @retval 無
  */
void Display (void)
{
    extern float result_lx;
    extern float temp;
    float result_De;

/*-------------------顯示讀取的光照值---------------------*/   
    OLED_ShowStr(0, 0, (unsigned char*)"Illu:", 2);
    OLED_ShowStr(100, 0, (unsigned char*)"Lx", 2);

    GY_30_ReadByte ();
    Convert_GY_30 ();       //取出光照強(qiáng)度值         

    OLED_ShowInteger(0, result_lx);
    OLED_ShowPoint(0);
    result_De = Float_Decimal(result_lx);
    OLED_ShowDecimal(0, result_De);
/*--------------------------------------------------------*/

/*--------------------顯示讀取的溫度值--------------------*/   
    OLED_ShowStr(0, 3, (unsigned char*)"Temp:", 2);
    OLED_ShowCN(100, 3, 0);

    temp = DS18B20_GetTemp_SkipRom ();  //取出讀取的溫度值

    OLED_ShowInteger(3, temp);
    OLED_ShowPoint(3);
    temp = Float_Decimal(temp);
    OLED_ShowDecimal(3, temp);
/*--------------------------------------------------------*/

/*---------------------顯示讀取的液位值-------------------*/   
    OLED_ShowStr(0, 6, (unsigned char*)"Leve:", 2);
    OLED_ShowStr(100, 6, (unsigned char*)"mm", 2);

    Level_read();     //取出讀取的液位值

    OLED_ShowInteger(6, val);
    OLED_ShowPoint(6);
    val = Float_Decimal(val);
    OLED_ShowDecimal(6, val);
/*--------------------------------------------------------*/

    SysTick_Delay_ms(500); //間隔1s刷新
}

/**
  * @brief  顯示函數(shù) (溫度預(yù)設(shè)值)
  * @param  avl:溫度值
  * @retval 無
  */
void Display_T (float avl)
{
    OLED_CLS(); //清屏

    while (1)
    {
        Default_Value_T(avl);

        if (flag == 1 || flag1 == 1)
        {
            flag = 0;  flag1 = 0; //清除中斷標(biāo)志位
            OLED_Show2Number(6, TempPresets);
            SysTick_Delay_s(1);

            if (flag==1|flag1==1) continue;
            else   break;
        }
    }

    T_flag = 0;  //清除KEY1中斷標(biāo)志位
    OLED_CLS();
}

/**
  * @brief  顯示函數(shù) (光強(qiáng)度預(yù)設(shè)值)
  * @param  avl:光強(qiáng)度值
  * @retval 無
  */
void Display_I (float avl)
{
    OLED_CLS(); //清屏

    while (1)
    {
        Default_Value_I(avl);

        if (flag == 1 || flag1 == 1)
        {
            flag = 0;   flag1 = 0;//清除中斷標(biāo)志位
            OLED_ShowInteger(6, IlluPresets);
            SysTick_Delay_s(1);

            if (flag==1||flag1==1) continue;
            else   break;
        }   
    }

    I_flag = 0;  //清除KEY4中斷標(biāo)志位
    OLED_CLS();
}

/**
  * @brief  顯示函數(shù) (液位預(yù)設(shè)值)
  * @param  avl:液位值
  * @retval 無
  */
void Display_L (float avl)
{
    OLED_CLS(); //清屏

    while (1)
    {
        Default_Value_L(avl);

        if (flag == 1 || flag1 == 1)
        {
            flag = 0;   flag1 = 0;//清除中斷標(biāo)志位
            OLED_Show2Number(6, LevelPresets);
            SysTick_Delay_s(1);

            if (flag==1||flag1==1) continue;
            else   break;
        }   
    }

    L_flag = 0;  //清除KEY4中斷標(biāo)志位
    OLED_CLS();
}

/**
  * @brief  藍(lán)牙發(fā)送函數(shù)
  * @param  無
  * @retval 無
  */
void LY_SentData (USART_TypeDef* pUSARTx)
{
    Usart_Send5Num(pUSARTx, DS18B20_GetTemp_SkipRom ());  //溫度
    Usart_Send5Num(pUSARTx, result_lx);          //光照度
    Usart_Send5Num(pUSARTx, Level_read());       //液位

    Usart_Send5Num(pUSARTx, TempPresets);     //預(yù)設(shè)溫度
    Usart_Send5Num(pUSARTx, IlluPresets);     //預(yù)設(shè)光照度
    Usart_Send5Num(pUSARTx, LevelPresets);    //預(yù)設(shè)液位
}

代碼.7z

202.62 KB, 下載次數(shù): 41, 下載積分: 黑幣 -5

手機(jī)APP接收.7z

3.15 MB, 下載次數(shù): 28, 下載積分: 黑幣 -5

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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