STM32F103C8T6库函数版 ZP01空气质量传感器应用

前言:笔者是在做一个智能衣柜项目的时候选用了此模块,去了很多电子资源网站,发现运用此模块的资源十分稀少,便自己编写相对简单的函数,希望对大家有所帮助

目录

一、 ZP01模块介绍

二、 代码编写

1.ZP01模块初始化和功能函数的定义

2.头文件声明:

3.主函数:


一、 ZP01模块介绍

二、 代码编写

1.ZP01模块初始化和功能函数的定义

#include "fy_includes.h"
#include "ZP01_User.h"
#include "fy_usart1.h"

void ZP01_USER_Init(void)
{
	  GPIO_InitTypeDef GPIO_InitStructure;	//定义一个GPIO_InitTypeDef类型的结构体
   	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启ZP01的外设时钟

	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	//选择要控制的GPIO引脚
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;	//设置引脚模式为通用上拉输入
  //	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚速率为50MHz
  	GPIO_Init(GPIOB, &GPIO_InitStructure);	//调用库函数,初始化GPIO


}

u8 Res=0;//下列函数的返回值
u8 ZP01_Read_Data()//定义一个带返回值的函数
{
    if(A_num == 0 && B_num == 0)
		{ 
			printf("空气质量:优\n");
		    Res=1;
		}
    if(A_num == 0 && B_num == 1)
		{  
			printf("空气质量:良\n");
		    Res=2;
		}
    if(A_num == 1 && B_num == 0)
		{  
			printf("空气质量:中\n");
		    Res=3;
		}
    if(A_num == 1 && B_num == 1)
		{  
			printf("空气质量:差\n");	
	      Res=4;
		} 
    
      return 	Res;
	
}

 <注>本模块引用了除ZP01头文件外,#include "fy_includes.h"为芯片引脚头文件(#include "stm32f10x.h"),#include "fy_usart1.h"为串口一头文件(#include "usart1.h")。

2.头文件声明:

#ifndef __ZP01_USER_H
#define __ZP01_USER_H

#include "fy_includes.h"

#define A_num PBin(6)	// PB6
#define B_num PBin(7)	// PB7	

void ZP01_USER_Init(void);//初始化

u8 ZP01_Read_Data();

extern u8 Res;//全局变量声明

#endif

 <注>extern u8 Res;为全局变量声明,来自笔者的提醒,如果没有这行,此模块就很难通过判断去添加其他功能模块,顺便吐槽一下,笔者是在做一个智能衣柜项目的时候选用了此模块,去了很多电子资源网站,发现运用此模块的资源十分稀少,应该是用PM2.5,粉尘传感器更精确吧,笔者属于是想偷懒了,相似功能的JW01因为要我运费加上要调用USART协议,感觉有些麻烦就懒得用了(捂脸),大家有兴趣的可以尝试一下JW01,欢迎交流(咧嘴)。

3.主函数:

#include "fy_includes.h"
#include "ZP01_User.h"
#include "jdq.h"
 
 
 int main(void)
 {	
	uint8_t rec_flag = 0;
    u8 TF = 0;

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	delay_init();
	ZP01_USER_Init();
	relay_Init();
	
	Usart1_Configuration(115200);
	Usart2_Configuration(115200);
  
	delay_ms(100);

	while(1)
	{
		rec_flag=ZP01_Read_Data();

		if(Res==1)
		{
			relay_1 = 0;
			relay_2 = 0;
      relay_3 = 0;

			printf("通风功能 关闭\n");

			TF=1;

		}


		if(Res==2)
		{
			relay_1 = 1;
			relay_2 = 0;
      relay_3 = 0;

			printf("通风功能低档 开启\n");

			TF=2;

		}
		
		if(Res==3)
		{
			relay_1 = 1;
			relay_2 = 1;
      relay_3 = 0;

			printf("通风功能高档 开启\n");

			TF=3;

		}

		if(Res==4)
		{
			relay_1 = 1;
			relay_2 = 1;
      relay_3 = 1;

			printf("除湿通风功能开启\n");

			TF=4;

		}
   }
}

 <注>因为笔者是项目中用到此模块,就自己写了个函数,所以主函数中还涉及了一些其它模块,我已基本精简,留下了它和继电器互动,诸位同道可自行参考,待我这个项目做完后会把整个智能衣柜的工程分享出来,有兴趣的朋友们可以留心一下(比如说收藏关注,一键三连啥的(羞涩))

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄奕子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值