当前位置: 首页 > news >正文

云酒店网站建设山西网站建设平台

云酒店网站建设,山西网站建设平台,杭州seo排名公司,房产网站内容建设规划辛辛苦苦配了成功让树莓派开始工作了,开始搞智能家居!大体思路:基于工厂模式,分模块来实现上图分为三部分:主控、外设、控制主控我采用的是树莓派的4b4G版本,外设包括四个区域的灯(我的和上图有…

辛辛苦苦配了成功让树莓派开始工作了,开始搞智能家居!

大体思路:基于工厂模式,分模块来实现

上图分为三部分:主控、外设、控制

主控我采用的是树莓派的4b4G版本,外设包括四个区域的灯(我的和上图有略微差异),火灾报警器,摄像头,人脸识别的锁(先实现这么多功能)、控制部分主要有语音控制和网络控制

业务代码采用工厂模式来编写,一个工厂代表一个结构体,结构体的具体对象可以有多种,这样代码更便于管理,代码部分主要包括两个工厂,多个设备和主函数

两个工厂分别是contrlDevices和socket工厂,每个工厂包括一个头文件(定义整个工厂的成员属性)和多个成员,然后通过主函数来调用

注:多个设备放到主函数上采用的是链表的形式

下面先通过实现点亮房间的灯来开启工厂模式的第一步:

一、编辑contrlDevices.h头文件确定该工厂的成员属性

#include <wiringPi.h>//设备在使用的过程当中需要对引脚进行操作,所以要包含此头文件,在这里包含了,设备的.c文件就不需要再包含struct Devices//定义一个名字叫Devices的结构体,属性尽可能全面包含所有设备要用到的属性,可定义不调用
{char devicesName[128];//设备名字int status;//设备状态int pin;//引脚名int (*open)(int pin);//灯的开启函数,注意要用函数指针的形式,因为访问结构体的时候是以访问地址的形式int (*close)(int pin);int (*deviceInit)(int pin);//初始化int (*readStatus)();int (*changeStatus)(int status);struct Devices *next;//链表的下一个链接地址放置位置}struct Devices *addroomLightToDeviceLink(struct Devices *phead);//链表成链方式的函数 

二、编辑卧室灯的代码:

#include "contrlDevices.h"//上述的头文件
#include <stddef.h>//NULL的头文件int roomLightOpen(int pin)//具体的卧室灯打开函数
{digitalWrite(pin,LOW);}int roomLightClose(int pin)//关闭函数
{digitalWrite(pin,HIGH);}int roomLightInit(int pin)//初始化函数
{pinMode(pin,OUTPUT);digitalWrite(pin,HIGH);}struct Devices roomLight = {//编辑成员卧室灯的结构体,对Devices结构体内的属性按需写入.devicesName = "roomLight",.pin = 29,.open = roomLightOpen,//注意这里函数的调用不同于一般情况,不需要带括号以及里面的内容.close = roomLightClose,.deviceInit = roomLightInit};//按需的意思是在实现控制灯的功能的过程中需要用到什么东西
struct Devices *addroomLightToDeviceLink(struct Devices *phead)
{//主函数中传入链表头的地址,头插法成链if(phead == NULL){return &roomLight;//如果是第一个,把该设备的结构体地址(该设备的头)放上去作为链表头}else{//如果不是第一个roomLight.next = phead;//原链表头地址传给该设备的nextphead = &roomLight;//链表头重新更换为该设备的结构体地址}
}

三、编写主函数:

#include <stdio.h>
#include "contrlDevices.h"
#include <string.h>
struct Devices *findDeviceByName(char *name,struct Devices *phead)//通过比较名字来开启对应设备
{struct Devices *tmp=phead;if(phead == NULL){return NULL;}else{while(tmp != NULL){//不断判断if(strcmp(tmp->devicesName,name)==0){//比较设备名称是否等于main中的namereturn tmp;//如果是则返回tmp}tmp = tmp->next;转换到下一个设备判断}return NULL;}}int main()
{char *name = "roomLight";//设备名称if(wiringPiSetup() ==-1){//判断wiringPi库是否初始化成功return -1;//不成功直接退出程序}struct Devices *pdeviceHead = NULL;//设置一个链表头,初始化为空pdeviceHead = addroomLightToDeviceLink(pdeviceHead);调用头插成链函数,把roomLight设备放入链表struct Devices *tmp = findDeviceByName(name,pdeviceHead);定义一个tmp接收判断结果if(tmp != NULL){//如果不为空tmp->deviceInit(tmp->pin);//设备初始化tmp->open(tmp->pin);//设备开启}return 0;
}

编写完成,在树莓派上编译运行:

:gcc main.c roomLight.c -lwiringPi
:./a.out

运行结果(未接灯)

这里的继电器1亮了代表继电器接通,到时候接入灯泡就🆗!

http://www.yayakq.cn/news/675399/

相关文章:

  • 网站建设规划书有哪些内容国外网站空间租用费用
  • 网站注销申请书网站建设能带来流量么
  • 网站集群建设是如何拥有自己的网站域名
  • 海纳企业网站建设wordpress 获取文章id
  • 自己开公司 自己做网站吗广东建数网络科技有限公司
  • 网站建设费用上海五种常见的软件架构
  • 陕西西安网站建设有趣的网站官网
  • 网站建设优化的书籍wordpress如何增加商品
  • 公司网站运营方案大庆企业网站建设公司
  • 韩国ps教程网站石家庄建设银行河北分行招聘网站
  • 设计素材网站能挣钱吗wordpress博客导航开源主题
  • 泉州seo网站管理前端网站制作教程
  • 网站建设介绍ppt模板下载宝安建设网站
  • 北京企业建设网站制作网站开发设计合同
  • 怎么查看网站开发人如何安装网站模板文件
  • 免费精准客源广州seo关键词优化外包
  • 网站建设和维护费用南昌市 做网站的公司
  • 工会网站开发需求分析广州网站建设 名片制作 网站管理
  • 做网站的步骤的文本百度搜索风云榜
  • 毛绒玩具东莞网站建设最有效的网站推广公司
  • 网站建设电话销售术语广告素材网站
  • 直播网站开发步骤长春 餐饮 网站建设
  • 怎么修改网站首页logo优化是什么工作
  • 西安公司网站设计费用鑫三科技网站设计
  • 杭州网络公司网站建设wordpress建设论坛
  • 文山 砚山 网站建设购物网站怎么建立
  • 怎么让别人访问我建的网站贵阳做网站开发的公司
  • 做网站分辨率一般多少微信公众号菜单跳转的网页怎么制作
  • 钓鱼网站开发系列教程2022一级造价停考
  • 怎么做网站差不多站长wordpress 挣钱