智能家居工厂模式整体设计框架&控制设备测试

文章介绍了一个使用RaspberryPi和链表结构来管理继电器控制家居灯光的系统。通过创建设备类,定义设备的初始化、打开、关闭等操作,将不同灯具(如浴室灯、二楼灯等)作为链表节点进行管理。在mainPro.c中,实现了链表遍历并打开所有灯的功能。另外,通过修改mainPro.c,可以实现按设备名称控制特定灯具的开关。

 

 

通俗理解的步骤就是链表通用模板定义(在头文件里定义)、链表的创建(头插尾插,在.C 文件里)、链表的初始化(init配置管脚初始电平等)、链表内容的读取(指令工厂TCP服务端读取客户端发来的指令、串口读取语音模块发来的指令)、链表的遍历查找(找到控制工厂里面需要被控制的链表节点)、链表内容的写入(写入来自指令工厂的控制指令)。

接收的指令,可以放在临时创建的变量里面,或者创建一个本地文件fd保存,或者一开始创建链表通用模板里面定义一个存放接收指令的数组,这样更方便访问。

继电器控制灯代码

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);		//“餐厅灯”加入设备链表函数声明

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;				            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aurora Smith

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值