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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能家居 (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) ——工厂模式火焰报警的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。