智能家居 (4) ——工厂模式火焰报警
生活随笔
收集整理的這篇文章主要介紹了
智能家居 (4) ——工厂模式火焰报警
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 工廠模式火焰報警部分代碼
- contrlEquipments.h 文件(設備類)
- mainPro.c 文件(主函數)
- fireDetection.c(火焰傳感器)
- buzzer.c 文件(蜂鳴器)
- 調試驗證
- 往期文章
工廠模式火焰報警部分代碼
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); //“餐廳燈”加入設備鏈表函數聲明 struct Equipment *addFireDetectionToEquipmentLink(struct Equipment *phead); //“火焰傳感器”加入設備鏈表函數聲明 struct Equipment *addBuzzerToEquipmentLink(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; //定義初始鏈表首端 // pequipHead = addBathroomLightToEquipmentLink(pequipHead); // pequipHead = addSecondfloorLightToEquipmentLink(pequipHead); // pequipHead = addLivingroomLightToEquipmentLink(pequipHead); // pequipHead = addRestaurantLightToEquipmentLink(pequipHead);pequipHead = addFireDetectionToEquipmentLink(pequipHead); //“火焰傳感器”加入設備鏈表pequipHead = addBuzzerToEquipmentLink(pequipHead ); //“蜂鳴器”加入設備鏈表int fireStatus; //存放“火焰傳感器”狀態char *fireName = "fireDetection";char *buzzerName = "buzzer";struct Equipment *firetmp = pequipHead;struct Equipment *buztmp = pequipHead;while(buztmp != NULL){ //尋找鏈表中蜂鳴器對應鏈節if(strcmp(buzzerName,buztmp->equipName) == 0){buztmp->Init(buztmp->pinNum); //初始化“蜂鳴器”break;}buztmp = buztmp->next;}while(firetmp != NULL){if(strcmp(fireName,firetmp->equipName) == 0){firetmp->Init(firetmp->pinNum); //初始化火焰傳感器的引腳為輸入模式while(1){fireStatus = firetmp->readStatus(firetmp->pinNum); //讀取“火焰傳感器”狀態if(fireStatus == 0){ //“火焰傳感器”處于 0狀態buztmp->open(buztmp->pinNum); //開啟蜂鳴器}else if(fireStatus == 1){ //“火焰傳感器”處于 1狀態buztmp->close(buztmp->pinNum); //關閉蜂鳴器}delay(1000); //有火蜂鳴器響一秒}}firetmp = firetmp->next;}return 0; }fireDetection.c(火焰傳感器)
#include "contrlEquipments.h" //自定義設備類的文件int fireDetectionInit(int pinNum); //初始化“火焰傳感器”函數聲明 int readFireDetectionStatus(int pinNum); //讀取“火焰傳感器”狀態函數聲明struct Equipment fireDetection = { //定義火焰傳感器(對象).equipName = "fireDetection", //名字.pinNum = 21, //樹莓派 21號(wPi)引腳.Init = fireDetectionInit, //指定初始化函數.readStatus = readFireDetectionStatus, //指定讀取“火焰傳感器”狀態函數 };int fireDetectionInit(int pinNum) {pinMode(pinNum,INPUT); //配置引腳為輸入模式digitalWrite(pinNum,HIGH); //引腳置高電平,狀態為1 }int readFireDetectionStatus(int pinNum) {return digitalRead(pinNum); //讀取引腳電平,并返回,高電平返回 1,低電平返回 0(有火) }struct Equipment *addFireDetectionToEquipmentLink(struct Equipment *phead) //火焰傳感器(對象)加入設備鏈表函數 {if(phead == NULL){return &fireDetection;}else{fireDetection.next = phead;phead = &fireDetection;return phead;} }buzzer.c 文件(蜂鳴器)
#include "contrlEquipments.h" //自定義設備類的文件int buzzerInit(int pinNum); //“初始化蜂鳴器”函數聲明 int buzzerOpen(int pinNum); //“開啟蜂鳴器”函數聲明 int buzzerClose(int pinNum); //“關閉蜂鳴器”函數聲明 struct Equipment *addBuzzerToLink(struct Equipment *phead); //蜂鳴器(對象)加入設備鏈表函數聲明struct Equipment buzzer = { //定義蜂鳴器(對象).equipName = "buzzer", //名字.pinNum = 22, //樹莓派 22號(wpi)引腳.Init = buzzerInit, //指定初始化函數.open = buzzerOpen, //指定“開啟蜂鳴器”函數.close = buzzerClose, //指定“關閉蜂鳴器”函數 };int buzzerInit(int pinNum) {pinMode(pinNum,OUTPUT); //配置引腳為輸出模式digitalWrite(pinNum,HIGH); //引腳置高電平,蜂鳴器關閉 }int buzzerOpen(int pinNum) {digitalWrite(pinNum,LOW); //引腳置低電平,蜂鳴器開啟 }int buzzerClose(int pinNum) {digitalWrite(pinNum,HIGH); //引腳置高電平,蜂鳴器關閉 }struct Equipment *addBuzzerToEquipmentLink(struct Equipment *phead) //蜂鳴器(對象)加入設備鏈表函數 {if(phead == NULL){return &buzzer;}else{buzzer.next = phead;phead = &buzzer;return phead;} }調試驗證
編譯運行:
往期文章
智能家居 (1) ——智能家居整體功能框架
智能家居 (2) ——設計模式的引入
智能家居 (3) ——工廠模式繼電器控制燈
智能家居 (4) ——工廠模式火焰報警
智能家居 (5) —— LD3320語音模塊二次開發
智能家居 (6) ——語音識別線程控制
智能家居 (7) ——網絡服務器線程控制
智能家居 (8) ——智能家居項目整合(網絡控制線程、語音控制線程,火災報警線程)
網絡編程知識預備(1) ——了解OSI網絡模型
網絡編程知識預備(2) ——淺顯易懂的三次握手與四次揮手
網絡編程知識預備(3) ——SOCKET、TCP、HTTP之間的區別與聯系
網絡編程知識預備(4) ——了解HTTP協議與HTTPS協議
網絡編程知識預備(5) ——libcurl庫簡介及其編程訪問百度首頁
智能家居 (9) ——人臉識別攝像頭安裝實現監控功能
智能家居 (10) ——人臉識別祥云平臺編程使用
智能家居 (11) ——樹莓派攝像頭捕捉人臉并識別
智能家居 (12) ——人臉識別整合到智能家居系統
智能家居 (13) ——智能家居加入手機app端控制
總結
以上是生活随笔為你收集整理的智能家居 (4) ——工厂模式火焰报警的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页扫雷html css js,HTML
- 下一篇: 智能家居 (5) —— LD3320语音