目錄:
- 浴室燈 .C 檔案:
- 二樓燈 .C 檔案:
- 客廳燈 .C 檔案:
- 餐廳燈 .C 檔案:
- 設備類 .h 檔案:
- 主函式 .C 檔案:
控制樹莓派引腳模式 > 控制繼電器組 > 控制燈光
浴室燈 .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;
}
}
二樓燈 .C 檔案:
#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;
}
}
客廳燈 .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;
}
}
餐廳燈 .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;
}
}
設備類 .h 檔案:
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); //“餐廳燈”加入設備鏈表函式宣告
主函式 .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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260723.html
標籤:其他
