智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装

这篇具有很好参考价值的文章主要介绍了智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

采用工厂模式以面向对象的方式来封装各种设备模块,方便整合项目以及后期的维护和扩展

mainPro.c(主函数)

#include <stdio.h>
#include "controlDevice.h"

struct Devices        *pdeviceHead  = NULL;         //设备工厂链表头

struct Devices* findDeviceByName(struct Devices *phead,char *name)          //在设备链表中查找设备
{
    struct Devices *tmp = phead;
    if(tmp == NULL){
        printf("The devicesLink is NULL");
        return NULL;
    
    }else{
        while(tmp != NULL){
            if(strcmp(tmp->deviceName,name) == 0){
                return tmp;
            }
            tmp = tmp->next;
        }
   
     return NULL;   

    }

}

int main()
{
	if(wiringPiSetup()<0){//初始化wiringPi外设库

            printf("wiringPi Init failed\n");
            return -1;
        }
      //设备控制工厂初始化
    pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);        //将卫生灯加入设备链表
    pdeviceHead = addbedroomLightToDeviceLink(pdeviceHead);         //将卧室灯加入设备链表
    pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);      //将餐厅灯加入设备链表
    pdeviceHead = addLivingroomLightToDeviceLink(pdeviceHead);      //将客厅灯加入设备链表
    pdeviceHead = addFireToDeviceLink(pdeviceHead);                 //将火灾检测加入设备链表
    pdeviceHead = addBeepToDeviceLink(pdeviceHead);                 //将蜂鸣器加入设备链表

controlDevice.h( 设备类)

#include <wiringPi.h>
#include <stddef.h>

struct Devices
{
    char deviceName[128];                       //设备名字
    int status;                                 //状态
    int pinNum;                                 //引脚

    int (*deviceInit)(int pinNum);              //设备初始化函数指针,后面类似
    int (*open)(int pinNum);                    //打开设备
    int (*close)(int pinNum);                   //关闭设备
    

    int (*readStatus)(int pinNum);              //读取引脚状态
    int (*changeStatus)(int status);

    struct Devices *next;                       //方便链表使用的结构体指针
};

struct Devices *addBathroomLightToDeviceLink(struct Devices *phead);        //卫生间灯加入设备链表声明,以下类似
struct Devices *addbedroomLightToDeviceLink(struct Devices *phead);         //卧室灯
struct Devices *addRestaurantLightToDeviceLink(struct Devices *phead);      //餐厅灯
struct Devices *addLivingroomLightToDeviceLink(struct Devices *phead);      //客厅灯
struct Devices *addFireToDeviceLink(struct Devices *phead);                 //火灾检测器
struct Devices *addBeepToDeviceLink(struct Devices *phead);                 //蜂鸣器

bathroomLight.c(浴室灯)

#include "controlDevice.h"

int bathroomLightInit(int pinNum)
{
     pinMode(pinNum,OUTPUT);
     digitalWrite(pinNum,HIGH);

}

int bathroomLightOpen(int pinNum)
{
    digitalWrite(pinNum,LOW);
}

int bathroomLightClose(int pinNum)
{
    digitalWrite(pinNum,HIGH);

}

int bathroomLightChangeStatus()
{
     //暂时不用,后面用着在完善

}

struct Devices bathroomLight = {

    .deviceName = "bathroomLight",
    .pinNum = 26,
    .deviceInit = bathroomLightInit,
    .open  = bathroomLightOpen,
    .close = bathroomLightClose,
    .changeStatus = bathroomLightChangeStatus,


};

struct Devices *addBathroomLightToDeviceLink(struct Devices *phead)		//将浴室灯加入设备链表的函数
{
    if(phead == NULL){
        return &bathroomLight;
    
    }else{
        bathroomLight.next=phead;
        phead = &bathroomLight;
        return phead;
    }




}

livingroomLight.c(客厅灯)

#include "controlDevice.h"

int livingroomLightInit(int pinNum)
{
     pinMode(pinNum,OUTPUT);//设置引脚为输出模式
     digitalWrite(pinNum,HIGH);

}


int livingroomLightOpen(int pinNum)
{
    digitalWrite(pinNum,LOW);
}

int livingroomLightClose(int pinNum)
{
    digitalWrite(pinNum,HIGH);

}

int livingroomLightChangeStatus()
{
    //暂时不用,后面用着在完善

}

struct Devices livingroomLight = {

    .deviceName = "livingroomLight",
    .pinNum = 29,
    .deviceInit = livingroomLightInit,
    .open  = livingroomLightOpen,
    .close = livingroomLightClose,
    .changeStatus = livingroomLightChangeStatus,


};

struct Devices *addLivingroomLightToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &livingroomLight;
    
    }else{
        livingroomLight.next=phead;
        phead = &livingroomLight;
        return phead;
    }


}

restaurantLight.c(餐厅灯)

#include "controlDevice.h"

int restaurantLightInit(int pinNum)
{
     pinMode(pinNum,OUTPUT);//设置引脚为输出模式
     digitalWrite(pinNum,HIGH);

}


int restaurantLightOpen(int pinNum)
{
    digitalWrite(pinNum,LOW);
}

int restaurantLightClose(int pinNum)
{
    digitalWrite(pinNum,HIGH);

}

int restaurantLightChangeStatus()
{
    //暂时不用,后面用着在完善

}

struct Devices restaurantLight = {

    .deviceName = "restaurantLight",
    .pinNum = 28,
    .deviceInit = restaurantLightInit,
    .open  = restaurantLightOpen,
    .close = restaurantLightClose,
    .changeStatus = restaurantLightChangeStatus,


};

struct Devices *addRestaurantLightToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &restaurantLight;
    
    }else{
        restaurantLight.next=phead;
        phead = &restaurantLight;
        return phead;
    }


}

beedroomLight(卧室灯)

#include "controlDevice.h"

int bedroomLightInit(int pinNum)
{
     pinMode(pinNum,OUTPUT);//设置引脚为输出模式
     digitalWrite(pinNum,HIGH);

}


int bedroomLightOpen(int pinNum)
{
    digitalWrite(pinNum,LOW);
}

int bedroomLightClose(int pinNum)
{
    digitalWrite(pinNum,HIGH);

}

int bedroomLightChangeStatus()
{
    //暂时不用,后面用着在完善

}

struct Devices bedroomLight = {

    .deviceName = "bedroomLight",
    .pinNum = 27,
    .deviceInit = bedroomLightInit,
    .open  = bedroomLightOpen,
    .close = bedroomLightClose,
    .changeStatus = bedroomLightChangeStatus,


};

struct Devices *addbedroomLightToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &bedroomLight;
    
    }else{
        bedroomLight.next=phead;
        phead = &bedroomLight;
        return phead;
    }




}

fire.c(火灾检测)

#include "controlDevice.h"

int fireInit(int pinNum)
{
     pinMode(pinNum,INPUT);//设置引脚为输出模式

}

int fireStatusRead(int pinNum)
{
    return digitalRead(pinNum);
    
}


int fireChangeStatus()
{
    //暂时不用,后面用着在完善

}

struct Devices fire = {

    .deviceName = "fire",
    .pinNum = 25,
    .deviceInit = fireInit,
    .readStatus = fireStatusRead,
    .changeStatus = fireChangeStatus,


};

struct Devices *addFireToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &fire;
     }else{
        fire.next=phead;
        phead = &fire;
        return phead;
    }

}
    

beep.c(和火灾检测配合实现火灾报警的蜂鸣器)文章来源地址https://www.toymoban.com/news/detail-649019.html

#include "controlDevice.h"


int beepInit(int pinNum)
{
     pinMode(pinNum,OUTPUT);//设置引脚为输出模式
     digitalWrite(pinNum,HIGH);

}

int beepOpen(int pinNum)
{
    digitalWrite(pinNum,LOW);

}

int beepClose(int pinNum)
{
    digitalWrite(pinNum,HIGH);

}


int beepChangeStatus()
{
    //暂时不用,后面用着在完善

}

struct Devices beep = {

    .deviceName = "beep",
    .pinNum = 24,
    .deviceInit = beepInit,
    .open = beepOpen,
    .close = beepClose,
    .changeStatus = beepChangeStatus,


};

struct Devices *addBeepToDeviceLink(struct Devices *phead)
{
    if(phead == NULL){
        return &beep;
    
    }else{
        beep.next=phead;
        phead = &beep;
        return phead;
    }


}

到了这里,关于智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计——基于STM32的智能窗户系统(物联网、智能家居、APP控制、APP显示温湿度等信息、自动工作模式)

    本工程包括一下功能:1、远程控制工作功能:手机端app远程控制窗户开关 (手机app自主开发)                                     2、自动监测工作功能:自动监测天气,并控制窗户开关                                     3、远程监测数据功能:温度、可燃气体浓度

    2024年02月11日
    浏览(38)
  • 基于STM32智能家居控制系统软件设计及实现

    智能家居控制系统的软件设计主要使用Keil uVision5进行STM32主烧录程序的编写,主程序完成的功能主要为接收并判断语音识别模块传过来的信息,然后根据满足条件的不同进行对应的操作。例如,当语音模块传过来的信息为“打开电视”时,STM32单片将使给8550一个低电平,这样

    2024年02月02日
    浏览(32)
  • 基于STM32的智能家居控制器设计与实现

    一、项目背景 1.1 智能家居的发展与需求 随着科技的不断进步,智能家居成为现代生活中的一个热门领域。智能家居通过将传感器、执行器、网络和人机交互等技术融合在一起,实现了家居设备的智能化控制和管理。这为人们带来了更便捷、舒适和安全的居住环境。智能家居

    2024年02月09日
    浏览(29)
  • 两星期自学:微信小程序+ESP8266实现智能家居控制(1)

    在开始前,我简单的介绍一下我的项目功能和原理。项目功能:支持一键配网、有完整的微信小程序注册登录流程、小程序控制ESP8266、ESP8266读温湿度显示到小程序上、支持50组自定义红外遥控和一键配置米家、天猫精灵。 项目原理:巴法云作为服务器,可以把他理解成一个

    2024年03月15日
    浏览(33)
  • 基于ARM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

    目录 一   项目说明 ①   设计框架 ②   功能说明 ③   硬件说明 ④   软件说明 二   项目代码 1 mainPro.c 主函数 2 InputCommand.h 控制设备头文件 3 contrlDevices.h 外接设备头文件 4 bathroomLight.c 泳池灯 5 livingroomLight.c 卧室灯 6 restaurantLight.c 餐厅灯 7 upstairLight.c 二楼灯 8 fire.c 火焰

    2024年02月03日
    浏览(43)
  • 基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

    目录 一   项目说明 ①   设计框架 ②   功能说明 ③   硬件说明 ④   软件说明 二   项目代码 1 mainPro.c 主函数 2 InputCommand.h 控制设备头文件 3 contrlDevices.h 外接设备头文件 4 bathroomLight.c 泳池灯 5 livingroomLight.c 卧室灯 6 restaurantLight.c 餐厅灯 7 upstairLight.c 二楼灯 8 fire.c 火焰

    2024年02月02日
    浏览(45)
  • HomeAssistant添加HACS插件并实现公网控制米家,HomeKit等智能家居

    ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 已安装HomeAssistant。 Win,Linux,Macos 部署HomeAssistant:如何搭建Home Assistant智能家居系统并通过内网穿透实现远程控制家

    2024年02月05日
    浏览(50)
  • HomeAssistant如何添加HACS插件实现公网控制米家与HomeKit等智能家居

    ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 已安装HomeAssistant。 Win,Linux,Macos 部署HomeAssistant:如何搭建Home Assistant智能家居系统并通过内网穿透实现远程控制家

    2024年02月04日
    浏览(72)
  • 群晖Docker搭建HomeAssistant,结合内网穿透实现远程访问智能家居控制中心

    HomeAssistant 是一个可以控制 苹果 、 小米 、MQTT等设备的智能家居平台。本文首先介绍如何使用 群晖NAS 的 Docker 套件来安装 HomeAssistant平台 ,安装成功后,如何结合cpolar内网穿透工具实现 公网访问。 基本条件: 有正版群晖或黑群辉,可以装docker。 打开群晖 容器 管理 套件(

    2024年02月05日
    浏览(134)
  • 【雕爷学编程】Arduino智能家居之通过Blynk控制继电器实现定时开关灯

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年02月03日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包