冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 575|回覆: 0
打印 上一主題 下一主題

[討論] ATtiny85製作延時關閉開關

[複製鏈接]

2609

主題

0

好友

1000

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
8867
主題
2609
精華
0
積分
1000
楓幣
15
威望
977
存款
34822
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
455 小時
註冊時間
2023-1-12
最後登入
2024-11-22

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-9 11:11:45 |只看該作者 |倒序瀏覽
使用單片機ATtiny85製作延時關閉開關

程式碼:


int switchPin = 2;   // 開關輸入引腳
int relayPin = 3;    // 繼電器控制引腳

int switchState = 0; // 開關狀態(0為關閉,1為開啟)
unsigned long lastSwitchTime = 0; // 開關最後一次改變時間
unsigned long delayTime = 10 * 60 * 1000; // 延時時間,10分鐘

void setup() {
  pinMode(switchPin, INPUT_PULLUP);
  pinMode(relayPin, OUTPUT);
}

void loop() {
  // 讀取開關狀態
  int newSwitchState = digitalRead(switchPin);
  if (newSwitchState != switchState) {
    switchState = newSwitchState;
    lastSwitchTime = millis();
  }

  // 檢查是否需要延時關閉
  if (switchState == HIGH && (millis() - lastSwitchTime >= delayTime)) {
    digitalWrite(relayPin, HIGH);  // 關閉燈具
  }
}
在這個程式碼中,我們使用了單片機ATtiny85的GPIO輸入腳位來檢測開關狀態,以及GPIO輸出腳位控制繼電器的開關。

在setup()函數中,我們設置了GPIO輸入和輸出腳位的模式,並初始化了開關狀態和最後一次開關改變的時間。

在loop()函數中,我們先讀取開關狀態,如果開關狀態改變了,我們就更新最後一次開關改變的時間。接下來,我們檢查開關狀態是否為開啟狀態且是否已經過了延時時間,如果是,我們就關閉燈具。

需要注意的是,在此程式碼中,我們使用了內置的millis()函數來計算時間。

該函數返回自開機以來的毫秒數,可以用來實現延時和定時操作。

另外,我們也使用了INPUT_PULLUP模式來設置開關腳位,這可以讓我們省去了外部上拉電阻的使用。

製作開關時,需要將GPIO輸出腳位連接到繼電器的控制引腳,將GPIO輸入腳位連接到開關的輸入引腳。

此外,還需要將繼電器的通路和燈具的電源線分別連接到網路開關和燈具上。當延時時間到達後,單片機將會切斷繼電器的控制信號,使得燈具斷電關閉。

需要注意的是,如果需要對此程式進行修改,可能需要根據自己的硬體配置調整GPIO腳位、繼電器控制引腳和延時時間等變數的值。
[發帖際遇]: 洪嵐峰 猥褻小蘿莉被警察拘提,繳納罰金 2 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-22 12:00

回頂部