智能家居 (4) ——工厂模式火焰报警

更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入--------------》跳转接口
在这里插入图片描述

更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入--------------》跳转接口
在这里插入图片描述

目录

  • 工厂模式火焰报警部分代码
    • contrlEquipments.h 文件(设备类)
    • mainPro.c 文件(主函数)
    • fireDetection.c(火焰传感器)
    • buzzer.c 文件(蜂鸣器)
  • 调试验证
  • 往期文章

工厂模式火焰报警部分代码

contrlEquipments.h 文件(设备类)

#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 *addBathroomLightToEquipmentLink(struct Equipment *phead);			//“浴室灯”加入设备链表函数声明
struct Equipment *addSecondfloorLightToEquipmentLink(struct Equipment *phead);		//“二楼灯”加入设备链表函数声明
struct Equipment *addLivingroomLightToEquipmentLink(struct Equipment *phead);		//“客厅灯”加入设备链表函数声明
struct Equipment *addRestaurantLightToEquipmentLink(struct Equipment *phead);		//“餐厅灯”加入设备链表函数声明
struct Equipment *addFireDetectionToEquipmentLink(struct Equipment *phead);			//“火焰传感器”加入设备链表函数声明
struct Equipment *addBuzzerToEquipmentLink(struct Equipment *phead);				//“蜂鸣器”加入设备链表函数声明

mainPro.c 文件(主函数)

#include <stdio.h>
#include <string.h>
#include "contrlEquipments.h"int main()
{if(wiringPiSetup() == -1){									//使用wiringPi库,需初始化硬件printf("wiringPiSetup failed!\n");return -1; }struct Equipment *pequipHead = NULL;						//定义初始链表首端
//	pequipHead = addBathroomLightToEquipmentLink(pequipHead);
//	pequipHead = addSecondfloorLightToEquipmentLink(pequipHead);
//	pequipHead = addLivingroomLightToEquipmentLink(pequipHead);
//	pequipHead = addRestaurantLightToEquipmentLink(pequipHead);pequipHead = addFireDetectionToEquipmentLink(pequipHead);	//“火焰传感器”加入设备链表pequipHead = addBuzzerToEquipmentLink(pequipHead );			//“蜂鸣器”加入设备链表int fireStatus;												//存放“火焰传感器”状态char *fireName = "fireDetection";char *buzzerName = "buzzer";struct Equipment *firetmp = pequipHead;struct Equipment *buztmp = pequipHead;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;
}

fireDetection.c(火焰传感器)

#include "contrlEquipments.h"							//自定义设备类的文件int fireDetectionInit(int pinNum);				//初始化“火焰传感器”函数声明
int readFireDetectionStatus(int pinNum);		//读取“火焰传感器”状态函数声明struct Equipment fireDetection = {				//定义火焰传感器(对象).equipName = "fireDetection",				//名字.pinNum = 21,								//树莓派 21号(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 *addFireDetectionToEquipmentLink(struct Equipment *phead)		//火焰传感器(对象)加入设备链表函数
{if(phead == NULL){return &fireDetection;}else{fireDetection.next = phead;phead = &fireDetection;return phead;}
}

buzzer.c 文件(蜂鸣器)

#include "contrlEquipments.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 = 22,								//树莓派 22号(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 *addBuzzerToEquipmentLink(struct Equipment *phead)		//蜂鸣器(对象)加入设备链表函数
{if(phead == NULL){return &buzzer;}else{buzzer.next = phead;phead = &buzzer;return phead;}
}

调试验证

编译运行:
在这里插入图片描述

在这里插入图片描述

往期文章

智能家居 (1) ——智能家居整体功能框架
智能家居 (2) ——设计模式的引入
智能家居 (3) ——工厂模式继电器控制灯
智能家居 (4) ——工厂模式火焰报警
智能家居 (5) —— LD3320语音模块二次开发
智能家居 (6) ——语音识别线程控制
智能家居 (7) ——网络服务器线程控制
智能家居 (8) ——智能家居项目整合(网络控制线程、语音控制线程,火灾报警线程)
网络编程知识预备(1) ——了解OSI网络模型
网络编程知识预备(2) ——浅显易懂的三次握手与四次挥手
网络编程知识预备(3) ——SOCKET、TCP、HTTP之间的区别与联系
网络编程知识预备(4) ——了解HTTP协议与HTTPS协议
网络编程知识预备(5) ——libcurl库简介及其编程访问百度首页
智能家居 (9) ——人脸识别摄像头安装实现监控功能
智能家居 (10) ——人脸识别祥云平台编程使用
智能家居 (11) ——树莓派摄像头捕捉人脸并识别
智能家居 (12) ——人脸识别整合到智能家居系统
智能家居 (13) ——智能家居加入手机app端控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tplink软件升级有用吗_tp-link路由器固件怎么升级更新

展开全部升级TP-LINK路由器32313133353236313431303231363533e58685e5aeb931333433623061软件方法分为如下三种&#xff0c;请结合实际情况选择升级方法&#xff1a;类型一、云服务器自动推送升级软件路由器WAN口联网成功后&#xff0c;在路由器管理界面登录TP-LINK ID&#xf…

java-多线程操作全(Thread)-Timer简单使用

一、 多线程概念和作用 线程指进程中的一个执行场景&#xff0c;也就是执行流程&#xff0c;那么进程和线程的区别是什么 1.每个进程是一个应用程序&#xff0c;都有独立的内存空间 2.同一个进程中的线程共享其进程中的内存和资源 (共享的内存是堆内存和方法内存&#xff0c;栈…

Apache http强制转为https页面访问(转)

1在httpd.conf文件里使下面模块生效LoadModule rewrite_module modules/mod_rewrite.so2httpd.conf配置文件或者是在httpd-vhost.conf文件里修改<Directory "C:/Apache2.2/docs/1.com">Options Indexes FollowSymLinksAllowOverride All# 上面是http-https时需…

读《系统虚拟化-原理与实现》-第三章

虚拟化概述 概念&#xff1a; 在虚拟环境里&#xff0c;虚拟机监控器&#xff08;VMM&#xff09;抢占了操作系统的位置&#xff0c;编程的物理机的管理者&#xff0c;同时向上层的软件呈现出虚拟的硬件平台&#xff0c;欺骗着上层的操作系统 虚拟机可以看做是物理机的一种高…

智能家居 (5) —— LD3320语音模块二次开发

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

java中事物的注解_编程式事务、XML配置事务、注解实现事务

Spring2.0框架的事务处理有两大类:1 编码式事务 , 这个不说.2 声明式事务 , 就说这个.声明式事务又有三种实现方法:1 (第一种) 最早的方法,用TransactionProxyFactoryBean,他是一个有AOP代理功能的FactoryBean.他返回的对象有事务.还要在spring的配置文件XML中配置,比较麻烦,不…

linux命令整理

1. mkdir ##创建目录 命令 【参数】 路径文件 参数&#xff1a; mkdir -p ##递归创建 mkdir -v ##显示创建目录的过程 示例&#xff1a; [rootXM ~]# mkdir /data [rootXM ~]# mkdir -pv test/{1..3}/{4..6} ##同时创建多个目录及子目录 mkdir: created di…

eclipse搭建SSH框架详解

2019独角兽企业重金招聘Python工程师标准>>> SSH框架是最常用的框架之一&#xff0c;在搭建SSH框架的时候总有人遇到这样&#xff0c;那样的问题。下面我介绍一下SSH框架搭建的全过程。 第一步&#xff1a;准备工作。 下载好eclipse,Struts2,Spring,Hibernate。…

龙芯派启用串口3-5

硬件平台&#xff1a;龙芯派二代 内核版本&#xff1a;linux-3.10 这几天在龙芯派上加了一个无线串口&#xff0c;决定采用串口3来连接串口&#xff0c;在龙芯派上执行 #ls /dev/ttyS* 发现只有ttyS0&#xff0c;查看设备树后发现其他串口的设备树节点都是有的&#xff0c…

智能家居 (7) ——网络服务器线程控制

目录网络线程控制代码inputCommand.hmainPro.csocketControl.c代码测试往期文章网络线程控制代码 inputCommand.h #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wiringPi.h> #include <wiringSerial.h> #include &l…

vue插槽面试题_关于前端Vue框架的面试题,面试官可能会问到哪些。?

这年头&#xff0c;程序员面试都讲究坐姿&#xff0c;姿势不对&#xff0c;努力白费。参照下图&#xff0c;请同学们对号入座。回想一下&#xff0c;自己平时面试的坐姿&#xff0c;你在面试官眼里&#xff0c;大概是什么形象&#xff0c;可能是工程师&#xff0c;也可能是键盘…

测绘软件使用心得

作为测绘工程专业来说&#xff0c;学习使用测绘软件是每一个学生的必修课。在学校我们主要学习autoCAD和南方CASS。 对于CAD是目前使用最广泛的设计软件&#xff0c;广泛应用于建筑&#xff0c;机械&#xff0c;测绘设计等工作。我们主要学习了如何使用CAD来绘制基本图形。在画…

shell 脚本编程之for语句、if语句(2 )

一、bash条件测试&#xff1a;整数测试 [ expression ]字符测试 expression 条件测试 test expression test 根据表达式求值的结果返回 0&#xff08;真&#xff09;或 1&#xff08;假&#xff09;1、整数测试&#xff1a;数值比较-gt 大于-ge 大于或等于-eq…

龙芯3A4000 VNC配置

安装 yum install tigervnc-server -y 拷贝配置文件 cp /lib/systemd/system/vncserver\.service /lib/systemd/system/vncserver:1.service修改配置文件 vim /lib/systemd/system/vncserver:1.service替换< USER>为用户名 配置、启动vnc systemctl enable vncs…

智能家居 (6) ——语音识别线程控制

目录语音识别线程控制代码inputCommand.hmainPro.cvoiceControl.c代码测试往期文章语音识别线程控制代码 inputCommand.h #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wiringPi.h> #include <wiringSerial.h>struc…

java程序设计精编教程第3版电子版课后答案_[java电子书] Java程序设计教程(第3版) PDF 电子书 百度云 网盘下载...

java自学网(www.javazx.com)-java论坛&#xff0c;java电子书推荐&#xff1a;《 Java程序设计教程(第3版)》- d5 C7 V4 o/ e/ Hjava电子书推荐理由&#xff1a;《Java程序设计教程(第3版普通高等教育十二五*规划教材)》讲解Java程序设计知识及其编程方法&#xff0c;包括Java语…

MIPS结构体传参

本文讲解了C语言运行在MIPS体系中结构体传参的情况 硬件平台&#xff1a;Loongson 3A3000 系统&#xff1a;uos 在《see MIPS run》中11.2.5中描述到&#xff0c;会将结构体成员压缩到各个arg寄存器中进行传递 “we have to pack the register with data to mimic the arran…

智能家居 (8) ——智能家居项目整合(网络控制线程、语音控制线程,火灾报警线程)

目录mainPro.c&#xff08;主函数&#xff09;指令工厂inputCommand.hvoiceControl.c&#xff08;语音控制&#xff09;socketControl.c&#xff08;网络线程&#xff09;控制工厂contrlEquipments.hbathroomLight.c&#xff08;浴室灯&#xff09;secondfloorLight.c&#xff…

mpu 配置内存空间_ARM存储器之:存储保护单元MPU

本文引用地址&#xff1a;http://www.eepw.com.cn/article/257010.htm15.4.2内存访问顺序当ARM处理器产生一个内存访问信号时&#xff0c;内存保护单位MPU将负责检查要访问的地址是否在被定义的域中。①如果地址不在任何域中&#xff0c;存储器产生异常。如果内核预取指令则MPU…

对象创建过程之二(类加载器)

2019独角兽企业重金招聘Python工程师标准>>> JAVA为我们提供了两种动态加载机制。 第一种是隐式机制。其实new一个对象和调用类的静态方法时&#xff0c;就是隐式机制在工作。 第二种是显示机制。显示的机制又有两种策略 第一种是用public static Class<?> …