IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32小项目】-- 基于STM32智能物联水控系统研究 -> 正文阅读

[嵌入式]【STM32小项目】-- 基于STM32智能物联水控系统研究

基于STM32智能物联水控系统研究

资料

在这里插入图片描述在这里插入图片描述
资源链接!!!https://download.csdn.net/download/wangshuqian1314/85214960

蓝牙研究

http://app.gzjkw.net/login/
可以通过这个进行图形化开发蓝牙APP!

温度程序

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart1.h"
#include "LCD1602.h"
#include "ds18b20.h"
#include "string.h"
#include "stdio.h"

char send_data[]="Heartbeats:000,Temp:00.0C\r\n";

/* USER CODE BEGIN PV */
// these variables are volatile because they are used during the interrupt service routine!
#define true 1
#define false 0
int Num;
unsigned char firstBeat = true;        // used to seed rate array so we startup with reasonable BPM
unsigned char secondBeat = false;      // used to seed rate array so we startup with reasonable BPM
/* USER CODE END PV */

unsigned char DisBuff[4]={0};

u8 setn = 0;
u8 tempMax=38;
void keyscan()
{
		if(KEY1==0)
		{
				delay_ms(20);
			  if(KEY1==0)
				{
						while(KEY1==0);
					  setn++;
					  if(setn>1)
						{
								setn = 0;
								LCD_Write_String(0,1,"Temp: 00.0C     ");
						}

						if(setn==1)
						{
							  LCD_Write_String(0,0," set Temperature");
								LCD_Write_String(0,1,"       00.0C    ");
							  LCD_Write_Char(7,1,tempMax%100/10+'0');
								LCD_Write_Char(8,1,tempMax%10+'0');
						}
				}
		}
		if(KEY2==0)
		{
				delay_ms(20);
			  if(KEY2==0)
				{
						while(KEY2==0);
						if(setn==1)
						{
							  if(tempMax < 99)tempMax++;
							  LCD_Write_Char(7,1,tempMax%100/10+'0');
								LCD_Write_Char(8,1,tempMax%10+'0');
						}
				}
		}
		if(KEY3==0)
		{
				delay_ms(20);
			  if(KEY3==0)
				{
						while(KEY3==0);
						if(setn==1)
						{
							  if(tempMax > 0)tempMax--;
							  LCD_Write_Char(7,1,tempMax%100/10+'0');
								LCD_Write_Char(8,1,tempMax%10+'0');
						}
				}
		}
}

int main(void)
{	
	unsigned int count,cnt;
	unsigned short temperature=0;
	
	delay_init();	    	 //延时函数初始化	  
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
	Usart1_Init(9600);
	delay_ms(300);
	LCD_Init();          // 1602初始化 
	KEY_IO_Init();
	BEEP_DISENABLE();
	DS18B20_Init();
	LCD_Write_String(0,1,"Temp: 00.0C     ");
	temperature = DS18B20_Get_Temp();
  while(1)
	{
		    keyscan();
		    if(count++ > 200 && setn == 0)
				{
					
					  temperature = DS18B20_Get_Temp();
					  LCD_Write_Char(6,1,temperature%1000/100+'0');
						LCD_Write_Char(7,1,temperature%100/10+'0');
						LCD_Write_Char(9,1,temperature%10+'0');
					  send_data[20] = temperature%1000/100+'0';
					  send_data[21] = temperature%100/10+'0';
					  send_data[23] = temperature%10+'0';
					
					//  if(temperature>=tempMax*10)BEEP=1;else BEEP=0;
					
					  if(cnt++ > 10)
						{
								cnt = 0;
							  Uart1_SendStr(send_data);
						}
					
					  count = 0;
				}
				delay_ms(1);
  }
}


智能水控系统

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
#include "lcd.h"
#include "key.h"
#include "malloc.h"  
#include "MMC_SD.h" 
#include "ff.h"  
#include "exfuns.h"
#include "fontupd.h"
#include "text.h"	
#include "hc05.h"
#include "string.h"
#include "adc.h"
#include "timer.h"
#include "ds18b20.h"
#include "tempProcess.h"
#include "control.h"
#include "TouchDialog.h"
#include "stdlib.h"
#include "touch.h" 
#include "myiic.h" 
#include "24cxx.h"
#include "chaoshengbo.h"

#define TIMI 20

u32 tempall[3];
u8 tempstr[10];
u8 tempstr1[10];
u8 tempstr2[10];
u8 humistr[10];
u8 volstr[10];
u8 WaterFlag=0,OnceFlag=0;
u8 tempMeasure,vol=0;
char strsum[20]={0};
extern u8 TIM4CH3_CAPTURE_STA; //输入捕获状态 
extern u16 TIM4CH3_CAPTURE_VAL;//输入捕获值

void Int2Str(u8* str, u32 intnum)
{
    u32 i, Div = 1000000000, j = 0, Status = 0;
    for (i = 0; i < 10; i++)
    {
        str[j++] = (intnum / Div) + '0';
        intnum = intnum % Div;
        Div /= 10;
        if ((str[j-1] == '0') & (Status == 0))
        {
            j = 0;
        }
        else
        {
            Status++;
        }
    }
}



void strcats(){
	strcat(strsum,(char*)tempstr);
	strcat(strsum,"+");
	strcat(strsum,(char*)tempstr1);
	strcat(strsum,"+");
	strcat(strsum,(char*)tempstr2);
	strcat(strsum,"#");
}

void lengthMeasure(void)
{
		GPIO_SetBits(GPIOC,GPIO_Pin_0);
		delay_us(15);
		GPIO_ResetBits(GPIOC,GPIO_Pin_0);
		
}

 int main(void)
 { 		 
	u32 temperature,temperature1,temperature2;
	float hottime=0,coldtime=0;
	float distance;
	u8 temp;
	u8 temper=0;
//	u8 str[]={0};
  u16 adcx;		 
	u8 key,t=0,k;
	u8 reclen=0;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 
	delay_init();	    	 //延时函数初始化	  
	uart_init(9600);	 	//串口初始化为9600			 
	LCD_Init();			//初始化液晶 
	TIM3_Int_Init(1000,7199);
	TIM_Cmd(TIM3, DISABLE);
	TIM2_Int_Init(1000,7199);
	TIM_Cmd(TIM3, DISABLE);
	LED_Init();         //LED初始化	 													    
	KEY_Init();
	Control_Init();
	inputint();
  Adc_Init();	 //ADC初始化
 	mem_init();				//初始化内存池	    
 	exfuns_init();			//为fatfs相关变量申请内存  
  f_mount(fs[0],"0:",1); 	//挂载SD卡 
 	f_mount(fs[1],"1:",1); 	//挂载FLASH.
	while(font_init()) 	//检查字库
	{
		LCD_ShowString(60,70,200,16,16,"SD Card OK");
		LCD_ShowString(60,90,200,16,16,"Font Updating...");
	 	key=update_font(20,110,16);//更新字库
		while(key)//更新失败		
		{			 		  
			LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
			delay_ms(200);
			LCD_Fill(20,110,200+20,110+16,WHITE);
			delay_ms(200);		       
		} 		  
		LCD_ShowString(60,110,200,16,16,"Font Update Success!");
		delay_ms(1500);	
		LCD_Clear(WHITE);//清屏	       
	}  
	
	POINT_COLOR=RED;
	Show_Str(50,20,200,24,"智能水控系统",24,0);
	Show_Str(30,100,200,16,"当前热水温度:  . C",16,0);
	Show_Str(30,120,200,16,"当前冷水温度:  . C",16,0);
	Show_Str(30,140,200,16,"当前混合水温度:  . C",16,0);
	Show_Str(30,160,200,16,"本次用水:",16,0);



	while(DS18B20_Init())	//测热水DS18B20初始化	 
	{
		LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
		delay_ms(200);
		LCD_Fill(60,130,239,130+16,WHITE);
 		delay_ms(200);
	}	

	while(DS18B20_Init1())	//测冷水DS18B20初始化	 
	{
		LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
		delay_ms(200);
		LCD_Fill(60,130,239,130+16,WHITE);
 		delay_ms(200);
	}		
	


	while(DS18B20_Init2())	//测混合水DS18B20初始化	 
	{
		LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
		delay_ms(200);
		LCD_Fill(60,130,239,130+16,WHITE);
 		delay_ms(200);
	}		

	

	while(HC05_Init()) 		//初始化ATK-HC05模块  
	{
		LCD_ShowString(30,90,200,16,16,"ATK-HC05 Error!"); 
		delay_ms(500);
		LCD_ShowString(30,90,200,16,16,"Please Check!!!"); 
		delay_ms(100);
	}

	key=HC05_Get_Role();//获得蓝牙状态
	HC05_Set_Cmd("AT+ROLE=0");//设置为从机器模式
	HC05_Set_Cmd("AT+RESET");	//复位ATK-HC05模块	

	while(1)
	{	 
		
		//读取温度
 		if(t%10==0)//每100ms读取一次
		{			
			temperature=DS18B20_Get_Temp();   //热水温度
			temperature1=DS18B20_Get_Temp1();		//冷水温度		
			temperature2=DS18B20_Get_Temp2();	 		//混合水温度
			tempall[0]=temperature/10;
			//tempall[0]=25;
			tempall[1]=temperature1/10;
			tempall[2]=temperature2/10;
			Int2Str(tempstr,tempall[0]);			//将温度信息转为字符串来进行发送
			Int2Str(tempstr1,tempall[1]);
			Int2Str(tempstr2,tempall[2]);
			strcats();				//字符串拼接
			//LED1=!LED1;
			LCD_ShowString(80,200,209,119,16,(u8*)strsum);
			u2_printf("%s#",(u8*)strsum);			
			for(k=0;k<20;k++){
				strsum[k]='\0';
			}
			if(temperature<0)
			{
				LCD_ShowChar(30+70+32,100,'-',16,0);			//显示负号
				temperature=-temperature;					//转为正数
			}else LCD_ShowChar(30+70+32,100,' ',16,0);			//去掉负号
			LCD_ShowNum(30+70+8+32,100,temperature/10,2,16);	//显示正数部分	    
   		LCD_ShowNum(30+70+32+32,100,temperature%10,1,16);			//显示小数部分 	
			
			if(temperature1<0)	
			{
				LCD_ShowChar(30+70+32,120,'-',16,0);			//显示负号
				temperature1=-temperature1;					//转为正数
			}else LCD_ShowChar(30+70+32,120,' ',16,0);			//去掉负号
			LCD_ShowNum(30+70+8+32,120,temperature1/10,2,16);	//显示正数部分	    
   		LCD_ShowNum(30+70+32+32,120,temperature1%10,1,16);			//显示小数部分 
			
			if(temperature2<0)
			{
				LCD_ShowChar(30+70+48,140,'-',16,0);			//显示负号
				temperature2=-temperature2;					//转为正数
			}else LCD_ShowChar(30+70+48,140,' ',16,0);			//去掉负号
			LCD_ShowNum(30+70+8+48,140,temperature2/10,2,16);	//显示正数部分	    
   		LCD_ShowNum(30+70+32+48,140,temperature2%10,1,16);				//显示小数部分 
		}	
		
	 	delay_ms(10);
		t++;
		
		if(t==20)
		{
			t=0;
			LED0=!LED0;
		}
		

		
		//蓝牙模块
		if(USART2_RX_STA&0X8000)			//接收到一次数据了
		{  
 			reclen=USART2_RX_STA&0X7FFF;	//得到数据长度
		  USART2_RX_BUF[reclen]=0;	 	//加入结束符
			//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

			if(reclen<USART2_MAX_RECV_LEN) 		//控制DS1检测
			{
				if(!strcmp((const char*)USART2_RX_BUF,"w")){   //判断是否开启浇水系统
					WaterFlag=0;
					
				}else {
					WaterFlag=1;
							
				}			
			}
			
 			LCD_ShowString(30,200,209,119,16,USART2_RX_BUF);//显示接收到的数据
			for(k=0;k<200;k++){
				USART2_RX_BUF[k]='\0';
			}
 			USART2_RX_STA=0;	
			
			LED1=1;
		}
		if(WaterFlag){
				Get_Distance();
			while(!FLAG_CSB);
				FLAG_CSB=0;
				distance=(float)(TIME_GET)*0.034*0.5;
				LCD_ShowxNum(135,220,(u16)distance,2,16,0x80);
				if((distance<=5)&&(!OnceFlag)){
					OnceFlag=1;
					LED1=0;
					temper=tempControl();
					hottime=getHotwaterTime(temper);
					coldtime=getColdwaterTime(temper);	
					LCD_ShowNum(30,240,temper,2,16);
					LCD_ShowNum(30,260,hottime,3,16);
					LCD_ShowNum(30,280,coldtime,3,16);
					if(hottime>0){	
						IN1=1;
						TIM2->ARR=hottime*1000-1;
						TIM_Cmd(TIM2, ENABLE);
					}
					if(coldtime>0){
						IN2=1;
						TIM3->ARR=coldtime*1000-1;
						TIM_Cmd(TIM3, ENABLE);
					}
					vol=hottime*3.2+coldtime*4.7;
					LCD_ShowNum(30+70+8,160,vol,3,16);
								
				}
				else
				{
					if(distance>=25)
					{
					OnceFlag=0;
					}
					LED1=1;
				}
				
				}

	}
}


  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:55:19  更:2022-04-26 11:55:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:27:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码