Smart home (2)-factory mode flame alarm


Raspberry Pi reads the flame sensor status> Control the buzzer according to the status

fireDetection.c file (flame sensor):

When the "flame sensor" detects a flame, the DO pin will output a low level

#include "equipment.h"							//自定义设备类的文件

int fireDetectionInit(int pinNum);				//初始化“火焰传感器”函数声明
int readFireDetectionStatus(int pinNum);		//读取“火焰传感器”状态函数声明
struct Equipment *addFireDetectionToLink(struct Equipment *phead);
//火焰传感器(对象)加入设备链表函数声明

struct Equipment fireDetection = {
    
    				//定义火焰传感器(对象)
	.equipName = "fireDetection",				//名字
	.pinNum = 25,								//树莓派 25号(wPi)引脚
	.Init = fireDetectionInit,					//指定初始化函数
	.readStatus = readFireDetectionStatus,		//指定读取“火焰传感器”状态函数
};

int fireDetectionInit(int pinNum)
{
    
    
	pinMode(pinNum,INPUT);						//配置引脚为输入模式
	digitalWrite(pinNum,HIGH);					//引脚置高电平,状态为1
}

int readFireDetectionStatus(int pinNum)
{
    
    
	return digitalRead(pinNum);					//读取引脚电平,并返回,高电平返回 1,低电平返回 0
}

struct Equipment *addFireDetectionToLink(struct Equipment *phead)		//火焰传感器(对象)加入设备链表函数
{
    
    
	if(phead == NULL){
    
    
		return &fireDetection;
	}else{
    
    
		fireDetection.next = phead;
		phead = &fireDetection;
		return phead;
	}
}

buzzer.c file (buzzer):

#include "equipment.h"							//自定义设备类的文件

int buzzerInit(int pinNum);						//“初始化蜂鸣器”函数声明
int buzzerOpen(int pinNum);						//“开启蜂鸣器”函数声明
int buzzerClose(int pinNum);					//“关闭蜂鸣器”函数声明
struct Equipment *addBuzzerToLink(struct Equipment *phead);
//蜂鸣器(对象)加入设备链表函数声明

struct Equipment buzzer = {
    
    						//定义蜂鸣器(对象)
	.equipName = "buzzer",						//名字
	.pinNum = 29,								//树莓派 29号(wpi)引脚
	.Init = buzzerInit,							//指定初始化函数
	.open = buzzerOpen,							//指定“开启蜂鸣器”函数
	.close = buzzerClose,						//指定“关闭蜂鸣器”函数
};

int buzzerInit(int pinNum)
{
    
    
	pinMode(pinNum,OUTPUT);						//配置引脚为输出模式
	digitalWrite(pinNum,HIGH);					//引脚置高电平,蜂鸣器关闭
}

int buzzerOpen(int pinNum)
{
    
    
	digitalWrite(pinNum,LOW);					//引脚置低电平,蜂鸣器开启
}

int buzzerClose(int pinNum)
{
    
    
	digitalWrite(pinNum,HIGH);					//引脚置高电平,蜂鸣器关闭
}

struct Equipment *addBuzzerToLink(struct Equipment *phead)		//蜂鸣器(对象)加入设备链表函数
{
    
    
	if(phead == NULL){
    
    
		return &buzzer;
	}else{
    
    
		buzzer.next = phead;
		phead = &buzzer;
		return phead;
	}
}

equipment.h file (equipment class):

#include <wiringPi.h>						//使用wiringPi库
#include <stdio.h>
#include <stdlib.h>

struct Equipment							//设备类
{
    
    
	char equipName[128];					//设备名
	int pinNum;								//引脚号
	int (*Init)(int pinNum);				//“初始化设备”函数指针
	int (*open)(int pinNum);				//“打开设备”函数指针
	int (*close)(int pinNum);				//“关闭设备”函数指针

	int (*readStatus)(int pinNum);			//“读取设备状态”函数指针
	int (*changeStatus)(int status);		//“改变设备状态”函数指针

	struct Equipment *next;
};

struct Equipment *addBathroomLightToLink(struct Equipment *phead);			//“浴室灯”加入设备链表函数声明
struct Equipment *addSecondfloorLightToLink(struct Equipment *phead);		//“二楼灯”加入设备链表函数声明
struct Equipment *addLivingroomLightToLink(struct Equipment *phead);		//“客厅灯”加入设备链表函数声明
struct Equipment *addRestaurantLightToLink(struct Equipment *phead);		//“餐厅灯”加入设备链表函数声明
struct Equipment *addFireDetectionToLink(struct Equipment *phead);			//“火焰传感器”加入设备链表函数声明
struct Equipment *addBuzzerToLink(struct Equipment *phead);					//“蜂鸣器”加入设备链表函数声明

main.c file (main function):

(Flame sensor function test)

#include <stdio.h>
#include <string.h>
#include "equipment.h"

int main()
{
    
    
	if(wiringPiSetup() == -1){
    
    									//使用wiringPi库,需初始化硬件
		printf("wiringPiSetup failed!\n");
		return -1; 
	}

	struct Equipment *equiphead = NULL;							//定义初始链表首端
	equiphead = addBathroomLightToLink(equiphead);
	equiphead = addSecondfloorLightToLink(equiphead);
	equiphead = addLivingroomLightToLink(equiphead);
	equiphead = addRestaurantLightToLink(equiphead);
	equiphead = addFireDetectionToLink(equiphead);				//“火焰传感器”加入设备链表
	equiphead = addBuzzerToLink(equiphead);						//“蜂鸣器”加入设备链表

	int fireStatus;												//存放“火焰传感器”状态
	char *fireName = "fireDetection";
	char *buzzerName = "buzzer";
	struct Equipment *firetmp = equiphead;
	struct Equipment *buztmp = equiphead;

	while(buztmp != NULL){
    
    										//寻找链表中蜂鸣器对应链节
		if(strcmp(buzzerName,buztmp->equipName) == 0){
    
    
			buztmp->Init(buztmp->pinNum);						//初始化“蜂鸣器”
			break;
		}
		buztmp = buztmp->next;
	}
	
	while(firetmp != NULL){
    
    
		if(strcmp(fireName,firetmp->equipName) == 0){
    
    
			firetmp->Init(firetmp->pinNum);						//初始化“火焰传感器”
			while(1){
    
    
				fireStatus = firetmp->readStatus(firetmp->pinNum);		//读取“火焰传感器”状态
				if(fireStatus == 0){
    
    							//“火焰传感器”处于 0状态
					buztmp->open(buztmp->pinNum);				//开启蜂鸣器
				}else if(fireStatus == 1){
    
    						//“火焰传感器”处于 1状态
					buztmp->close(buztmp->pinNum);				//关闭蜂鸣器
				}
				delay(1000);
			}
		}
		firetmp = firetmp->next;
	}

	return 0;
}

Past articles:

Smart Home (1)-Factory Mode Relay Control Light

Guess you like

Origin blog.csdn.net/lcx1837/article/details/113834478
Recommended