日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

智能家居 (4) ——工厂模式火焰报警

發(fā)布時(shí)間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能家居 (4) ——工厂模式火焰报警 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 工廠模式火焰報(bào)警部分代碼
    • contrlEquipments.h 文件(設(shè)備類)
    • mainPro.c 文件(主函數(shù))
    • fireDetection.c(火焰?zhèn)鞲衅?#xff09;
    • buzzer.c 文件(蜂鳴器)
  • 調(diào)試驗(yàn)證
  • 往期文章

工廠模式火焰報(bào)警部分代碼

contrlEquipments.h 文件(設(shè)備類)

#include <wiringPi.h> //使用wiringPi庫,也可使用自己寫的驅(qū)動 #include <stdio.h> #include <stdlib.h>struct Equipment //設(shè)備類 {char equipName[128]; //設(shè)備名int pinNum; //引腳號int (*Init)(int pinNum); //“初始化設(shè)備”函數(shù)指針int (*open)(int pinNum); //“打開設(shè)備”函數(shù)指針int (*close)(int pinNum); //“關(guān)閉設(shè)備”函數(shù)指針int (*readStatus)(int pinNum); //“讀取設(shè)備狀態(tài)”函數(shù)指針int (*changeStatus)(int status); //“改變設(shè)備狀態(tài)”函數(shù)指針struct Equipment *next; };struct Equipment *addBathroomLightToEquipmentLink(struct Equipment *phead); //“浴室燈”加入設(shè)備鏈表函數(shù)聲明 struct Equipment *addSecondfloorLightToEquipmentLink(struct Equipment *phead); //“二樓燈”加入設(shè)備鏈表函數(shù)聲明 struct Equipment *addLivingroomLightToEquipmentLink(struct Equipment *phead); //“客廳燈”加入設(shè)備鏈表函數(shù)聲明 struct Equipment *addRestaurantLightToEquipmentLink(struct Equipment *phead); //“餐廳燈”加入設(shè)備鏈表函數(shù)聲明 struct Equipment *addFireDetectionToEquipmentLink(struct Equipment *phead); //“火焰?zhèn)鞲衅鳌奔尤朐O(shè)備鏈表函數(shù)聲明 struct Equipment *addBuzzerToEquipmentLink(struct Equipment *phead); //“蜂鳴器”加入設(shè)備鏈表函數(shù)聲明

mainPro.c 文件(主函數(shù))

#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); //“火焰?zhèn)鞲衅鳌奔尤朐O(shè)備鏈表pequipHead = addBuzzerToEquipmentLink(pequipHead ); //“蜂鳴器”加入設(shè)備鏈表int fireStatus; //存放“火焰?zhèn)鞲衅鳌睜顟B(tài)char *fireName = "fireDetection";char *buzzerName = "buzzer";struct Equipment *firetmp = pequipHead;struct Equipment *buztmp = pequipHead;while(buztmp != NULL){ //尋找鏈表中蜂鳴器對應(yīng)鏈節(jié)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); //初始化火焰?zhèn)鞲衅鞯囊_為輸入模式while(1){fireStatus = firetmp->readStatus(firetmp->pinNum); //讀取“火焰?zhèn)鞲衅鳌睜顟B(tài)if(fireStatus == 0){ //“火焰?zhèn)鞲衅鳌碧幱?0狀態(tài)buztmp->open(buztmp->pinNum); //開啟蜂鳴器}else if(fireStatus == 1){ //“火焰?zhèn)鞲衅鳌碧幱?1狀態(tài)buztmp->close(buztmp->pinNum); //關(guān)閉蜂鳴器}delay(1000); //有火蜂鳴器響一秒}}firetmp = firetmp->next;}return 0; }

fireDetection.c(火焰?zhèn)鞲衅?#xff09;

#include "contrlEquipments.h" //自定義設(shè)備類的文件int fireDetectionInit(int pinNum); //初始化“火焰?zhèn)鞲衅鳌焙瘮?shù)聲明 int readFireDetectionStatus(int pinNum); //讀取“火焰?zhèn)鞲衅鳌睜顟B(tài)函數(shù)聲明struct Equipment fireDetection = { //定義火焰?zhèn)鞲衅?#xff08;對象).equipName = "fireDetection", //名字.pinNum = 21, //樹莓派 21號(wPi)引腳.Init = fireDetectionInit, //指定初始化函數(shù).readStatus = readFireDetectionStatus, //指定讀取“火焰?zhèn)鞲衅鳌睜顟B(tài)函數(shù) };int fireDetectionInit(int pinNum) {pinMode(pinNum,INPUT); //配置引腳為輸入模式digitalWrite(pinNum,HIGH); //引腳置高電平,狀態(tài)為1 }int readFireDetectionStatus(int pinNum) {return digitalRead(pinNum); //讀取引腳電平,并返回,高電平返回 1,低電平返回 0(有火) }struct Equipment *addFireDetectionToEquipmentLink(struct Equipment *phead) //火焰?zhèn)鞲衅?#xff08;對象)加入設(shè)備鏈表函數(shù) {if(phead == NULL){return &fireDetection;}else{fireDetection.next = phead;phead = &fireDetection;return phead;} }

buzzer.c 文件(蜂鳴器)

#include "contrlEquipments.h" //自定義設(shè)備類的文件int buzzerInit(int pinNum); //“初始化蜂鳴器”函數(shù)聲明 int buzzerOpen(int pinNum); //“開啟蜂鳴器”函數(shù)聲明 int buzzerClose(int pinNum); //“關(guān)閉蜂鳴器”函數(shù)聲明 struct Equipment *addBuzzerToLink(struct Equipment *phead); //蜂鳴器(對象)加入設(shè)備鏈表函數(shù)聲明struct Equipment buzzer = { //定義蜂鳴器(對象).equipName = "buzzer", //名字.pinNum = 22, //樹莓派 22號(wpi)引腳.Init = buzzerInit, //指定初始化函數(shù).open = buzzerOpen, //指定“開啟蜂鳴器”函數(shù).close = buzzerClose, //指定“關(guān)閉蜂鳴器”函數(shù) };int buzzerInit(int pinNum) {pinMode(pinNum,OUTPUT); //配置引腳為輸出模式digitalWrite(pinNum,HIGH); //引腳置高電平,蜂鳴器關(guān)閉 }int buzzerOpen(int pinNum) {digitalWrite(pinNum,LOW); //引腳置低電平,蜂鳴器開啟 }int buzzerClose(int pinNum) {digitalWrite(pinNum,HIGH); //引腳置高電平,蜂鳴器關(guān)閉 }struct Equipment *addBuzzerToEquipmentLink(struct Equipment *phead) //蜂鳴器(對象)加入設(shè)備鏈表函數(shù) {if(phead == NULL){return &buzzer;}else{buzzer.next = phead;phead = &buzzer;return phead;} }

調(diào)試驗(yàn)證

編譯運(yùn)行:

往期文章

智能家居 (1) ——智能家居整體功能框架
智能家居 (2) ——設(shè)計(jì)模式的引入
智能家居 (3) ——工廠模式繼電器控制燈
智能家居 (4) ——工廠模式火焰報(bào)警
智能家居 (5) —— LD3320語音模塊二次開發(fā)
智能家居 (6) ——語音識別線程控制
智能家居 (7) ——網(wǎng)絡(luò)服務(wù)器線程控制
智能家居 (8) ——智能家居項(xiàng)目整合(網(wǎng)絡(luò)控制線程、語音控制線程,火災(zāi)報(bào)警線程)
網(wǎng)絡(luò)編程知識預(yù)備(1) ——了解OSI網(wǎng)絡(luò)模型
網(wǎng)絡(luò)編程知識預(yù)備(2) ——淺顯易懂的三次握手與四次揮手
網(wǎng)絡(luò)編程知識預(yù)備(3) ——SOCKET、TCP、HTTP之間的區(qū)別與聯(lián)系
網(wǎng)絡(luò)編程知識預(yù)備(4) ——了解HTTP協(xié)議與HTTPS協(xié)議
網(wǎng)絡(luò)編程知識預(yù)備(5) ——libcurl庫簡介及其編程訪問百度首頁
智能家居 (9) ——人臉識別攝像頭安裝實(shí)現(xiàn)監(jiān)控功能
智能家居 (10) ——人臉識別祥云平臺編程使用
智能家居 (11) ——樹莓派攝像頭捕捉人臉并識別
智能家居 (12) ——人臉識別整合到智能家居系統(tǒng)
智能家居 (13) ——智能家居加入手機(jī)app端控制

總結(jié)

以上是生活随笔為你收集整理的智能家居 (4) ——工厂模式火焰报警的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。