智能家居-基于香橙派——烟雾报警器(二)

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;
	}
};

准备就绪

 编译运行

 运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
stm32c8t6是一种高性能、低功耗的微控制器,它非常适合用于物联网设备中。而烟雾传感器则是一种广泛应用于家庭安防中的探测设备,可以检测到空气中的烟雾、灰尘和一氧化碳等有害气体。 stm32c8t6与烟雾传感器的结合可以实现智能化的烟雾检测功能。当传感器检测到烟雾或其他有害气体时,控制器会发出警报提示用户及时采取防护措施,保障人身安全。 烟雾传感器的代码编写需要注意以下几点: 1.引入头文件:包括stm32头文件和烟雾传感器相关的头文件。 2.初始化GPIO口:将传感器接口与之关联的GPIO口初始化为输入,如下所示: GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 3.编写检测函数:读取GPIO口的电平状态,当检测到LOW电平时,说明有烟雾或其他有害气体存在,触发警报。代码如下: uint8_t Smoke_Detect() { if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == RESET) { return 1; } return 0; } 4.在主函数中调用检测函数,根据返回值控制报警器和其他设备的操作。例如: if(Smoke_Detect()){ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); //控制LED灯亮起提示 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); //控制蜂鸣器发出声响 } 以上是基本的烟雾传感器代码编写方法,通过调整代码可以实现不同的功能要求。总的来说,stm32c8t6与烟雾传感器的结合可以实现智能化的烟雾检测和报警功能,为人们带来更多的安全保障和便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值