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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 智能家居工廠模式整體設計框架
  • 繼電器控制燈代碼
    • contrlEquipments.h 文件(設備類)
    • mainPro.c 文件(主函數)
    • bathroomLight.c 文件(浴室燈)
    • secondfloorLight.c 文件(二樓燈)
    • livingroomLight.c 文件(客廳燈)
    • restaurantLight.c 文件(餐廳燈)
  • 調試驗證
  • 往期文章

智能家居工廠模式整體設計框架

通俗理解的步驟就是鏈表通用模板定義(在頭文件里定義)、鏈表的創建(頭插尾插,在.C 文件里)、鏈表的初始化(init配置管腳初始電平等)、鏈表內容的讀取(指令工廠TCP服務端讀取客戶端發來的指令、串口讀取語音模塊發來的指令)、鏈表的遍歷查找(找到控制工廠里面需要被控制的鏈表節點)、鏈表內容的寫入(寫入來自指令工廠的控制指令)。

接收的指令,可以放在臨時創建的變量里面,或者創建一個本地文件fd保存,或者一開始創建鏈表通用模板里面定義一個存放接收指令的數組,這樣更方便訪問。

繼電器控制燈代碼

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); //“餐廳燈”加入設備鏈表函數聲明

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 ); //“餐廳燈”加入設備鏈表struct Equipment *tmp = pequipHead ;while(tmp != NULL){ //繼電器功能測試,打開鏈表上所有燈tmp->Init(tmp->pinNum); //先初始化tmp->open(tmp->pinNum);tmp = tmp->next;}return 0; }

bathroomLight.c 文件(浴室燈)

#include "contrlEquipments.h" //自定義設備類的文件int bathroomLightInit(); //初始化繼電器函數聲明 int bathroomLightOpen(); //“打開燈”函數聲明 int bathroomLightClose(); //“關閉燈”函數聲明 //struct Equipment *addBathroomLightToEquipmentLink(struct Equipment *phead); //浴室燈(對象)加入設備鏈表函數聲明struct Equipment bathroomLight = { //定義浴室燈(對象).equipName = "bathroomLight", //名字.pinNum = 26, //樹莓派 26號(wPi)引腳.Init = bathroomLightInit, //指定初始化函數.open = bathroomLightOpen, //指定“打開燈”函數.close = bathroomLightClose //指定“關閉燈”函數 };int bathroomLightInit(int pinNum) //C語言必須要傳參,JAVA不用,可直接訪問變量的值 {pinMode(pinNum,OUTPUT); //配置引腳為輸出模式digitalWrite(pinNum,HIGH); //引腳置高電平,斷開繼電器 }int bathroomLightOpen(int pinNum) {digitalWrite(pinNum,LOW); //引腳置低電平,閉合繼電器 }int bathroomLightClose(int pinNum) {digitalWrite(pinNum,HIGH); //引腳置高電平,斷開繼電器 }struct Equipment *addBathroomLightToEquipmentLink(struct Equipment *phead) //浴室燈(對象)加入設備鏈表函數 {if(phead == NULL){return &bathroomLight;}else{bathroomLight.next = phead; //以前的頭變成.nextphead = &bathroomLight; //更新頭return phead;} }

secondfloorLight.c 文件(二樓燈)

#include "contrlEquipments.h" //自定義設備類的文件int secondfloorLightInit(); //初始化繼電器函數聲明 int secondfloorLightOpen(); //“打開燈”函數聲明 int secondfloorLightClose(); //“關閉燈”函數聲明 //struct Equipment *addSecondfloorLightToLink(struct Equipment *phead); //二樓燈(對象)加入設備鏈表函數聲明struct Equipment secondfloorLight = { //定義二樓燈(對象).equipName = "secondfloorLight", //名字.pinNum = 27, //樹莓派 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 *addSecondfloorLightToEquipmentLink(struct Equipment *phead) //二樓燈(對象)加入設備鏈表函數 {if(phead == NULL){return &secondfloorLight;}else{secondfloorLight.next = phead;phead = &secondfloorLight;return phead;} }

livingroomLight.c 文件(客廳燈)

#include "contrlEquipments.h" //自定義設備類的文件int livingroomLightInit(); //初始化繼電器函數聲明 int livingroomLightOpen(); //“打開燈”函數聲明 int livingroomLightClose(); //“關閉燈”函數聲明 //struct Equipment *addLivingroomLightToLink(struct Equipment *phead); //客廳燈(對象)加入設備鏈表函數聲明struct Equipment livingroomLight = { //定義客廳燈(對象).equipName = "livingroomLight", //名字.pinNum = 28, //樹莓派 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 *addLivingroomLightToEquipmentLink(struct Equipment *phead) //客廳燈(對象)加入設備鏈表函數 {if(phead == NULL){return &livingroomLight;}else{livingroomLight.next = phead;phead = &livingroomLight;return phead;} }

restaurantLight.c 文件(餐廳燈)

#include "contrlEquipments.h" //自定義設備類的文件int restaurantLightInit(); //初始化繼電器函數聲明 int restaurantLightOpen(); //“打開燈”函數聲明 int restaurantLightClose(); //“關閉燈”函數聲明 struct Equipment *addRestaurantLightToLink(struct Equipment *phead); //餐廳燈(對象)加入設備鏈表函數聲明struct Equipment restaurantLight = { //定義餐廳燈(對象).equipName = "restaurantLight", //名字.pinNum = 29, //樹莓派 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 *addRestaurantLightToEquipmentLink(struct Equipment *phead) //餐廳燈(對象)加入設備鏈表函數 {if(phead == NULL){return &restaurantLight;}else{restaurantLight.next = phead;phead = &restaurantLight;return phead;} }

調試驗證

編譯運行程序:

由于mainPro.c文件中指定繼電器功能測試,打開鏈表上所有燈,可以發現繼電器組全部亮紅燈(如下圖所示)。也可以將實際的家居燈接入到繼電器中實現控制燈光的效果。

往期文章

智能家居 (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端控制

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯的全部內容,希望文章能夠幫你解決所遇到的問題。

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