orangepiZero2智能家居(二)主流程设计和灯光代码编写

1.主流程框架设计

1. mainPro.c

#include <stdio.h>
#include "contrlDevice.h"
#include "inputCommand.h"

int main(){

	//指令工厂初始化


	//设备工厂初始化


	//创建线程池
		//socket
		//语音
		//摄像头
		//火灾检测
	
	return 0;
}

2.inputCommand.h(指令工厂)

struct InputCommander{
	char commandName[128];
	char command[32];
	int (*Init)(char *name,char *ipAdress,char *port);
	int (*getCommand)(char *cmd);

	char log[1024];

	struct InputCommander *next;
	


};

3.contrlDevice.h(设备工厂)

struct Devices{
	char deviceName[32];
	int status;
	
	int (*open)();
	int (*close)();
	int (*deviceInit)();
	int (*readStatus)();//火灾
	int (*changeStatus)(int status);
	struct Devices *next;

};

4.bathroomLight.c

#include <stdio.h>
#include "contrlDevice.h"
#include "inputCommand.h"



int bathroomLightOpen(){


}
int bathroomLightClose(){


}
int bathroomLightCloseInit(){

}
int bathroomLightCloseStatus(int status){

}
struct Devices bathroomLight={
	.name="bathroomLight",

	.open=bathroomLightOpen,
	.close=bathroomLightClose,
	
	.deviceInit=bathroomLightCloseInit,
	.changeStatus=bathroomLightCloseStatus
		
};


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

2.实现浴室灯亮

把设备加入到设备列表
通过对设备链表的遍历查找相关的设备
找到设备后初始化设备,实现对设备的操作。

1. mainPro.c

#include <stdio.h>
#include <string.h>
#include "contrlDevice.h"
#include "inputCommand.h"
#include <wiringPi.h>
struct Devices *findDeviceByName(char *name,struct Devices *phead){
	struct Devices *ptmp=phead;
	if(ptmp==NULL){
		printf("none\n");
		return NULL;
	}else{
		while(ptmp!=NULL){
			if(strcmp(ptmp->deviceName,name)==0){

				return ptmp;
			}
			ptmp=ptmp->next;
		}
		return NULL;
	}

}


int main(){
	if(wiringPiSetup()==-1){
		return -1;
	}
	char *name="bathroomLight";


	struct Devices *pDeviceHead=NULL;
	struct Devices *tmp=NULL;
	pDeviceHead=addBathroomLightToDeviceLink(pDeviceHead);
	tmp=findDeviceByName(name,pDeviceHead);
	//指令工厂初始化
	if(tmp!=NULL){
		tmp->deviceInit(tmp->pinNum);
		tmp->open(tmp->pinNum);
	}

	//设备工厂初始化


	//创建线程池
		//socket
		//语音
		//摄像头
		//火灾检测
	
	return 0;
}

2.inputCommand.h(指令工厂)

#include <wiringPi.h>

struct InputCommander{
	char commandName[128];
	char command[32];
	int (*Init)(char *name,char *ipAdress,char *port);
	int (*getCommand)(char *cmd);

	char log[1024];

	struct InputCommander *next;
	


};

3.contrlDevice.h(设备工厂)

#include <wiringPi.h>
struct Devices{
	char deviceName[32];
	int status;
	int pinNum;
	int (*open)(int pinNum);
	int (*close)(int pinNum);
	int (*deviceInit)(int pinNum);
	int (*readStatus)(int pinNum);//火灾
	
	int (*changeStatus)(int status);


	struct Devices *next;

};
struct Devices*  addBathroomLightToDeviceLink(struct Devices *phead);

4.bathroomLight.c

#include <stdio.h>
#include "contrlDevice.h"
#include "inputCommand.h"



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

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

}
int bathroomLightCloseInit(int pinNum){
	pinMode(pinNum,OUTPUT);

	digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseStatus(int status){
	

}
struct Devices bathroomLight={
	.deviceName="bathroomLight",
	.pinNum=0,
	.open=bathroomLightOpen,
	.close=bathroomLightClose,
	
	.deviceInit=bathroomLightCloseInit,
	.changeStatus=bathroomLightCloseStatus
		
};

//把浴室灯加入链表
struct Devices*  addBathroomLightToDeviceLink(struct Devices *phead){
	if(phead==NULL){
		return &bathroomLight;
	}else{
		bathroomLight.next=phead;
		phead=&bathroomLight;
		return phead;
	}
}

其余的灯的代码编写与浴室灯几乎一样,改改名称就好了,在mainPro中添相关的调试信息即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值