找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1631|回复: 0
打印 上一主题 下一主题
收起左侧

stm32f1+ds18b02+bh1750+loed+water sensor+APP接收数据

[复制链接]
跳转到指定楼层
楼主
ID:819146 发表于 2022-6-9 15:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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);  //开机显示函数
void Display (void);   //显示函数 (温度,光强度,液位)
void Display_T (float avl);  //显示函数 (温度预设值)
void Display_I (float avl);  //显示函数 (光强度预设值)
void Display_L (float avl);  //显示函数 (液位预设值)

void LY_SentData (USART_TypeDef* pUSARTx);  //蓝牙发送函数

extern float result_lx;
extern float val;      
float temp = 0;
extern float TempPresets;   //预设温度
extern float IlluPresets;   //预设光照度
extern float LevelPresets; //预设液位
extern uint8_t flag;    //加标志位
extern uint8_t flag1;   //减标志位
uint8_t T_flag = 0;     //温度预设标志位
uint8_t I_flag = 0;     //光强度预设标志位
uint8_t L_flag = 0;     //液位预设标志位
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);   //全屏点亮
    SysTick_Delay_ms(20);
    OLED_Fill(0x00);   //全屏灭
    SysTick_Delay_ms(20);

    Start_Display ();  //开机显示函数

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

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

    DS18B20_ReadId ( ucDs18b20Id  );           // 读取 DS18B20 的序列号

    printf("\r\nDS18B20的序列号是: 0x");

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

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

    while(1)
    {
        Display ();   //显示函数 (温度,光强度,液位)
        LY_SentData (USART1);  //数据发送函数

/*-------------------- 报警处理 -------------------*/      
        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 ();
/*-------------------------------------------------*/   

/*-------------------- 设置预设值 -------------------*/         
        if (T_flag == 1)   Display_T (TempPresets);
        if (I_flag == 1)   Display_I (IlluPresets);
        if (L_flag == 1)   Display_L (LevelPresets);
/*---------------------------------------------------*/         

    }

}

/**
  * @brief  开机显示函数
  * @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  显示函数 (温度,光强度,液位值)
  * @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 ();       //取出光照强度值         

    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  显示函数 (温度预设值)
  * @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; //清除中断标志位
            OLED_Show2Number(6, TempPresets);
            SysTick_Delay_s(1);

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

    T_flag = 0;  //清除KEY1中断标志位
    OLED_CLS();
}

/**
  * @brief  显示函数 (光强度预设值)
  * @param  avl:光强度值
  * @retval 无
  */
void Display_I (float avl)
{
    OLED_CLS(); //清屏

    while (1)
    {
        Default_Value_I(avl);

        if (flag == 1 || flag1 == 1)
        {
            flag = 0;   flag1 = 0;//清除中断标志位
            OLED_ShowInteger(6, IlluPresets);
            SysTick_Delay_s(1);

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

    I_flag = 0;  //清除KEY4中断标志位
    OLED_CLS();
}

/**
  * @brief  显示函数 (液位预设值)
  * @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;//清除中断标志位
            OLED_Show2Number(6, LevelPresets);
            SysTick_Delay_s(1);

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

    L_flag = 0;  //清除KEY4中断标志位
    OLED_CLS();
}

/**
  * @brief  蓝牙发送函数
  * @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);     //预设温度
    Usart_Send5Num(pUSARTx, IlluPresets);     //预设光照度
    Usart_Send5Num(pUSARTx, LevelPresets);    //预设液位
}

代码.7z

202.62 KB, 下载次数: 41, 下载积分: 黑币 -5

手机APP接收.7z

3.15 MB, 下载次数: 28, 下载积分: 黑币 -5

评分

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

查看全部评分

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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