スマートホーム(1)-ファクトリーモードリレーコントロールライト


RaspberryPiピンモードを制御する>リレーグループを制御する>ライトを制御する

BathroomLight.cファイル(バスルームライト):

#include "equipment.h"			//自定义设备类的文件

int bathroomLightInit();		//初始化继电器函数声明
int bathroomLightOpen();		//“打开灯”函数声明
int bathroomLightClose();		//“关闭灯”函数声明
struct Equipment *addBathroomLightToLink(struct Equipment *phead);
//浴室灯(对象)加入设备链表函数声明

struct Equipment bathroomLight = {
    
    			//定义浴室灯(对象)
	.equipName = "bathroomLight",			//名字
	.pinNum = 21,							//树莓派 21号(wPi)引脚
	.Init = bathroomLightInit,				//指定初始化函数
	.open = bathroomLightOpen,				//指定“打开灯”函数
	.close = bathroomLightClose,			//指定“关闭灯”函数
};


int bathroomLightInit(int pinNum)
{
    
    
	pinMode(pinNum,OUTPUT);					//配置引脚为输出模式
	digitalWrite(pinNum,HIGH);				//引脚置高电平,断开继电器
}

int bathroomLightOpen(int pinNum)
{
    
    
	digitalWrite(pinNum,LOW);				//引脚置低电平,闭合继电器
}

int bathroomLightClose(int pinNum)
{
    
    
	digitalWrite(pinNum,HIGH);				//引脚置高电平,断开继电器
}

struct Equipment *addBathroomLightToLink(struct Equipment *phead)		//浴室灯(对象)加入设备链表函数
{
    
    
	if(phead == NULL){
    
    
		return &bathroomLight;
	}else{
    
    
		bathroomLight.next = phead;
		phead = &bathroomLight;
		return phead;
	}
}

secondfloorLight.cファイル(2階ランプ):

#include "equipment.h"				//自定义设备类的文件

int secondfloorLightInit();			//初始化继电器函数声明
int secondfloorLightOpen();			//“打开灯”函数声明
int secondfloorLightClose();		//“关闭灯”函数声明
struct Equipment *addSecondfloorLightToLink(struct Equipment *phead);
//二楼灯(对象)加入设备链表函数声明

struct Equipment secondfloorLight = {
    
    			//定义二楼灯(对象)
	.equipName = "secondfloorLight",			//名字
	.pinNum = 22,								//树莓派 22号(wPi)引脚
	.Init = secondfloorLightInit,				//指定初始化函数
	.open = secondfloorLightOpen,				//指定“打开灯”函数
	.close = secondfloorLightClose,				//指定“关闭灯”函数
};


int secondfloorLightInit(int pinNum)
{
    
    
	pinMode(pinNum,OUTPUT);						//配置引脚为输出模式
	digitalWrite(pinNum,HIGH);					//引脚置高电平,断开继电器
}

int secondfloorLightOpen(int pinNum)
{
    
    
	digitalWrite(pinNum,LOW);					//引脚置低电平,闭合继电器
}

int secondfloorLightClose(int pinNum)
{
    
    
	digitalWrite(pinNum,HIGH);					//引脚置高电平,断开继电器
}

struct Equipment *addSecondfloorLightToLink(struct Equipment *phead)		//二楼灯(对象)加入设备链表函数
{
    
    
	if(phead == NULL){
    
    
		return &secondfloorLight;
	}else{
    
    
		secondfloorLight.next = phead;
		phead = &secondfloorLight;
		return phead;
	}
}

livingroomLight.cファイル(リビングルームライト):

#include "equipment.h"				//自定义设备类的文件

int livingroomLightInit();			//初始化继电器函数声明
int livingroomLightOpen();			//“打开灯”函数声明
int livingroomLightClose();			//“关闭灯”函数声明
struct Equipment *addLivingroomLightToLink(struct Equipment *phead);
//客厅灯(对象)加入设备链表函数声明

struct Equipment livingroomLight = {
    
    			//定义客厅灯(对象)
	.equipName = "livingroomLight",				//名字
	.pinNum = 23,								//树莓派 23号(wPi)引脚
	.Init = livingroomLightInit,				//指定初始化函数
	.open = livingroomLightOpen,				//指定“打开灯”函数
	.close = livingroomLightClose,				//指定“关闭灯”函数
};


int livingroomLightInit(int pinNum)
{
    
    
	pinMode(pinNum,OUTPUT);						//配置引脚为输出模式
	digitalWrite(pinNum,HIGH);					//引脚置高电平,断开继电器
}

int livingroomLightOpen(int pinNum)
{
    
    
	digitalWrite(pinNum,LOW);					//引脚置低电平,闭合继电器
}

int livingroomLightClose(int pinNum)
{
    
    
	digitalWrite(pinNum,HIGH);					//引脚置高电平,断开继电器
}

struct Equipment *addLivingroomLightToLink(struct Equipment *phead)		//客厅灯(对象)加入设备链表函数
{
    
    
	if(phead == NULL){
    
    
		return &livingroomLight;
	}else{
    
    
		livingroomLight.next = phead;
		phead = &livingroomLight;
		return phead;
	}
}

RestaurantLight.cファイル(レストランライト):

#include "equipment.h"				//自定义设备类的文件

int restaurantLightInit();			//初始化继电器函数声明
int restaurantLightOpen();			//“打开灯”函数声明
int restaurantLightClose();			//“关闭灯”函数声明
struct Equipment *addRestaurantLightToLink(struct Equipment *phead);
//餐厅灯(对象)加入设备链表函数声明

struct Equipment restaurantLight = {
    
    			//定义餐厅灯(对象)
	.equipName = "restaurantLight",				//名字
	.pinNum = 24,								//树莓派 24号(wPi)引脚
	.Init = restaurantLightInit,				//指定初始化函数
	.open = restaurantLightOpen,				//指定“打开灯”函数
	.close = restaurantLightClose,				//指定“关闭灯”函数
};


int restaurantLightInit(int pinNum)
{
    
    
	pinMode(pinNum,OUTPUT);						//配置引脚为输出模式
	digitalWrite(pinNum,HIGH);					//引脚置高电平,断开继电器
}

int restaurantLightOpen(int pinNum)
{
    
    
	digitalWrite(pinNum,LOW);					//引脚置低电平,闭合继电器
}

int restaurantLightClose(int pinNum)
{
    
    
	digitalWrite(pinNum,HIGH);					//引脚置高电平,断开继电器
}

struct Equipment *addRestaurantLightToLink(struct Equipment *phead)		//餐厅灯(对象)加入设备链表函数
{
    
    
	if(phead == NULL){
    
    
		return &restaurantLight;
	}else{
    
    
		restaurantLight.next = phead;
		phead = &restaurantLight;
		return phead;
	}
}

Equipment.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 *addBathroomLightToLink(struct Equipment *phead);			//“浴室灯”加入设备链表函数声明
struct Equipment *addSecondfloorLightToLink(struct Equipment *phead);		//“二楼灯”加入设备链表函数声明
struct Equipment *addLivingroomLightToLink(struct Equipment *phead);		//“客厅灯”加入设备链表函数声明
struct Equipment *addRestaurantLightToLink(struct Equipment *phead);		//“餐厅灯”加入设备链表函数声明

main.cファイル(メイン関数):

(リレー機能テスト)

#include <stdio.h>
#include <string.h>
#include "equipment.h"

int main()
{
    
    
	if(wiringPiSetup() == -1){
    
    								//使用wiringPi库,需初始化硬件				  
	printf("wiringPiSetup failed!\n");
	return -1; 
	}

	struct Equipment *equiphead = NULL;						//定义初始链表首端
	equiphead = addBathroomLightToLink(equiphead);			//“浴室灯”加入设备链表
	equiphead = addSecondfloorLightToLink(equiphead);		//“二楼灯”加入设备链表
	equiphead = addLivingroomLightToLink(equiphead);		//“客厅灯”加入设备链表
	equiphead = addRestaurantLightToLink(equiphead);		//“餐厅灯”加入设备链表

	struct Equipment *tmp = equiphead;
	while(tmp != NULL){
    
    							//继电器功能测试
		tmp->Init(tmp->pinNum);
		tmp->open(tmp->pinNum);
		tmp = tmp->next;
	}

	return 0;
}

おすすめ

転載: blog.csdn.net/lcx1837/article/details/113830549