前言:笔者是在做一个智能衣柜项目的时候选用了此模块,去了很多电子资源网站,发现运用此模块的资源十分稀少,便自己编写相对简单的函数,希望对大家有所帮助
目录
一、 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;
}
}
}
<注>因为笔者是项目中用到此模块,就自己写了个函数,所以主函数中还涉及了一些其它模块,我已基本精简,留下了它和继电器互动,诸位同道可自行参考,待我这个项目做完后会把整个智能衣柜的工程分享出来,有兴趣的朋友们可以留心一下(比如说收藏关注,一键三连啥的(羞涩))