起初,上帝創造了天地。還有人類。人類創造了數字廚房定時器,就像這個。
人類說,酷但有點慘淡。讓我們做一個更好的!
上帝說,我聽到了你的呼喚,讓 Arduinos 出現吧:地球上到處都是 Arduinos,這很好。
人類拿了一個 Arduino 並創造了一個更好的廚房定時器,就像這個。
上帝看到新的廚房計時器說:我看到了你的新廚房計時器,它看起來很糟糕,但似乎太有趣了!而這是好的。
你需要什麼
既然您知道這一切的來源,讓我們深入探討一下。
我使用的所有元件都來自Arduino 入門套件,包括您在圖片和影片中看到的小麵包板。如果您願意,可以隨意將專案納入更大的專案。
您還需要一個電源:在玩耍時,PC 的 USB 埠和電纜就足夠了。
你需要做什麼
首先:請從入門套件或您喜歡的元件箱中收集所有需要的元件;如果你沒有,不要驚慌。網際網路上有很多。您可以在下面找到元件列表。
而且,你也需要程式碼。它在它的盒子裡,又在下面。
這個怎麼運作
基本上,就像任何其他類似裝置一樣,您可以在您附近的任何商店花一美元購買。但是,這是你的。這將向您展示這些小工具實際上是如何工作的。
這裡的關鍵字是:當前模式。計時器本身一次只能以四種模式中的一種執行:
IDLE - 計時器正在等待您的輸入,顯示當前設定的時間量;這也是上電或復位後的初始模式。
SETUP - 您可以透過長按 S4 進入此模式(在程式碼中這也稱為“重置按鈕”);在這裡,透過使用 S3(“開始停止按鈕”),您可以選擇要更改的值,以便設定稍後倒計時的經過時間;最後,分別使用 S2(“向下按鈕”)和 S1(“向上按鈕”),您可以減少或增加所選值(小時、分鐘或秒)。
RUNNING - 您可以透過按 S3 進入此模式,而離開它將需要 S3 或 S4(這將導致您進入空閒模式)。
RINGING - 當所需的時間過去後,此模式將自動啟用;你可以透過按任意開關離開它(即,讓小男孩停止響鈴)。
編碼
首先,我們需要包含適當的庫:
如果您還沒有它們,則需要下載並安裝它們:
- Paul Stoffregen 的時間圖書館(請從綠色的“克隆或下載”按鈕下載ZIP)
- Arduino 液晶庫
接下來,讓我們初始化那個漂亮的 LCD 模組:
請隨意隨意打亂引腳以獲得良好的佈線佈局:不要跟著我這樣做,因為我做了一個糟糕的佈線計劃!:D 例如,您可以反轉上述語句中的後四個引腳,以避免在下面的示意圖中看到黃色電線交叉(顯然,您必須相應地調整按鈕引腳常數,見下文)。玩,玩得開心!在複製/貼上之後,Arduinos 的生活就開始了!
接下來的 51 行程式碼包含靜態變數宣告和初始化。請隨意瀏覽它們,它們清晰的名稱和一些零散的評論將引導您瞭解整個事情。
setup() 函式執行您已經在任何 Arduino 草圖中看到無數次的通常的初步步驟。唯一值得注意的是第一個語句,它將設定初始 LCD 顯示游標的位置。因為,是的:這個模組要求你沿著它的行和列設定一個位置,然後“列印”一些東西,它會從那個位置開始出現。
現在讓我們轉到 loop() 函式。
首先,讓我們發現開關狀態。為了實現這一點,幾乎每一個都使用了以下程式碼塊:
針對相關引腳發出 digitalRead 並將結果與先前讀取的值進行比較:如果發生變化,則儲存新值以供將來參考,如果按下按鈕,則 bool "xxxButtonPressed" 靜態變數設定為 true。
檢視下面的電路圖,您會注意到每個輸入引腳都被一個 10k 電阻器強制為低電平,除非按下相應的開關並且引指令碼身直接連線到 +5V。一個相當經典的場景,嗯?
之前,我說“幾乎每個”都是因為有一個按鈕的作用與其他按鈕不同:S4。它的程式碼塊能夠檢測到上述長按以進入 SETUP 模式。
接下來是模式管理塊切換:每個案例檢視按鈕狀態觸發器(“xxxButtonPressed”)並將流重定向到正確的新狀態,或執行正確的操作。
前面的程式碼片段顯示了 IDLE 模式的管理方式,並且一目瞭然。另一個示例顯示了在響鈴時按下任何按鈕將如何停止響鈴:
下一個塊 - “時間管理” - 執行實際的時間差計算,觸發 RINGING 模式並在需要時實際響鈴。
最後一個塊——“LCD 管理”——透過在適當的位置列印適當的字串來管理每種模式的 LCD 顯示。
就是這樣。
更多詳情資料可前往基於 Arduino UNO 的經典廚房定時器(示意圖+程式碼) - 電路城
此方案版權歸電路城使用者所有,如作者不願釋出在頭條可私信或前往電路城聯絡相關人員刪除。