MQ2烟雾传感器+有源蜂鸣器模块
实现烟雾报警功能
主函数Mainpro.c
#include <stdio.h>
#include <string.h>
#include "controlDevice.h"
#include <unistd.h>
struct Device *findDeviceByName(char *name,struct Device *phead)
{
struct Device* tmp = phead;
if(phead == NULL){
return NULL;
}else{
while(tmp != NULL){
if(strcmp(tmp->DeviceName,name) == 0){
return tmp;
}
tmp = tmp->next;
}
return NULL;
}
}
int main()
{
if(wiringPiSetup() == -1){
printf("set up error!\n");
return -1;
}
struct Device *tmp = NULL;
struct Device *tmp1 = NULL;
char *name = "restaurant";
int frieStatus;
struct Device *pDeviceHead = NULL;
pDeviceHead = addrBathroomLight(pDeviceHead);
pDeviceHead = addrlivingRoomLight(pDeviceHead);
pDeviceHead = addrrestaurantLight(pDeviceHead);
pDeviceHead = addrsecondfloorLight(pDeviceHead);
pDeviceHead = addrFireBell(pDeviceHead);
pDeviceHead = addrBee(pDeviceHead);
while(1){
tmp = findDeviceByName("Frie",pDeviceHead);
if(tmp != NULL){
tmp->DeviceInit(tmp->pinNum);
frieStatus = tmp->readStatus(tmp->pinNum);
tmp1 = findDeviceByName("Bee",pDeviceHead);
if(tmp1 != NULL){
tmp1->DeviceInit(tmp1->pinNum);
if(frieStatus == 0){
tmp1->DeviceInit(tmp1->pinNum);
tmp1->open(tmp1->pinNum);
sleep(3);
printf("fire\n");
}else{
tmp1->DeviceInit(tmp1->pinNum);
tmp1->close(tmp1->pinNum);
}
}
}
}
return 0;
}
设备管理controlDevice.c
#include <wiringPi.h>
#include <stdlib.h>
struct Device
{
char DeviceName[128];
int status;
int pinNum;
int (*open)(int pinNum);
int (*close)(int pinNum);
int (*DeviceInit)(int pinNum);
int (*readStatus)();
int (*changeStatus)();
struct Device *next;
};
struct Device *addrBathroomLight(struct Device *phead);
struct Device *addrlivingRoomLight(struct Device *phead);
struct Device *addrrestaurantLight(struct Device *phead);
struct Device *addrsecondfloorLight(struct Device *phead);
struct Device *addrFireBell(struct Device *phead);
struct Device *addrBee(struct Device *phead);
烟雾传感器Fire.c
#include "controlDevice.h"
#include <stdlib.h>
int FireBellInit(int pinNum)
{
pinMode(pinNum,INPUT);
}
int FrieSataus(int pinNum)
{
return digitalRead(pinNum);
}
struct Device FireBell ={
.DeviceName = "Frie",
.pinNum = 10,
.DeviceInit = FireBellInit,
.readStatus = FrieSataus
};
struct Device *addrFireBell(struct Device *phead)
{
if(phead == NULL){
return &FireBell;
}else{
FireBell.next = phead;
phead = &FireBell;
return phead;
}
};
蜂鸣器报警Bee.c
#include "controlDevice.h"
#include <stdlib.h>
int BeeInit(int pinNum)
{
pinMode(pinNum,OUTPUT);
digitalWrite(pinNum,HIGH);
}
int Beeopen(int pinNum)
{
digitalWrite(pinNum,LOW);
}
int Beeclose(int pinNum)
{
digitalWrite(pinNum,HIGH);
}
struct Device Bee ={
.DeviceName = "Bee",
.pinNum = 9,
.DeviceInit = BeeInit,
.open = Beeopen,
.close = Beeclose
};
struct Device *addrBee(struct Device *phead)
{
if(phead == NULL){
return &Bee;
}else{
Bee.next = phead;
phead = &Bee;
return phead;
}
};
准备就绪
编译运行
运行结果