• 沒有找到結果。

1071009 motoduino上課講義

N/A
N/A
Protected

Academic year: 2021

Share "1071009 motoduino上課講義"

Copied!
33
0
0

加載中.... (立即查看全文)

全文

(1)

Motoduino U1 Board = Arduino UNO + Motor Control

(2)

2

1. 先到 http://gg.gg/motoduino 下載 arduino-1.8.5-windows.exe 軟體並安裝,桌面會產生 Arduino 捷徑, 如何確認 Arduino 已經連接成功與位置,在桌面電腦圖示上方按右鍵→內容→裝置管理員→展開連 接埠,每個人位置不一定相同,若沒有看到請拔除 USB 3 秒後重新插入,若還是不行可能是電腦前 方 USB 供電能力不足,請改用電腦背部 USB 插孔,未來若無法正常上傳程式,也可能是這原因。

2. 利用『檔案→範例→01Basics 基本→Blink 閃爍』,按下 編譯並上傳,當下方看到『上傳完畢』 表示正常,觀察主板 D13 的 LED 會閃爍,當出現紅色信息,表示有錯誤發生。

(3)

3. 由於 Arduino 是 C 語言架構,對於初學者較不容易,所以不妨先從積木式進行學習,請到

(4)

4

4. 利 用 下 載 motoblockly_broker_setup.exe 與 Motoduino_v11.zip 於 相 同 目 錄 → 安 裝 motoblockly_broker_setup.exe ,利用桌面捷徑執行,目的是將 motoduino_v1x library安裝到Arduino IDE

的環境裡,當安裝成功,如下圖所示,此軟體不可以關閉,因為積木式燒錄要用,只須縮小畫面。 5. 如何查看擴充目錄是否安裝成功,請到 Arduino 捷徑上方按右鍵→內容→開啟檔案位置→進入 libraries資料夾,若有看到 Motoduino_v11 資料夾表示成功,若沒安裝,則未來使用擴充元件,會告 知無法編譯成功因為找不到對應資料庫。 6. 將主板與擴充板上下結合,請平行插入,如下圖所示。 7. 點 選 積 木範 例 裡面 的 LED 閃 爍 , 切 換到 Arduino 頁 籤 , 按 下 燒 錄 → 確 定 , 然 後 觀 察 motoblockly_broker 視窗內容,裡面會顯示相關信息,經過數秒後,當看到程式燒錄成功即可

8. 第二種燒錄方式,可以不用透過 motoblockly_broker,按下 複製程式碼到 Arduino IDE 直接燒錄 亦可。

9. 嘗試利用右鍵的複製技巧,修改 LED閃爍範例程式如下圖,目的是測試擴充板左上方三顆 LED 的 數位輸入控制,當 LED 腳位為高電位則點亮,低電位即熄滅,在『設定』底下積木區塊裡面只會 執行一次,而在『迴圈』底下積木裡面則會反覆執行。

(5)

10. 接著練習RGB全彩LED,每隔 0.1 秒隨機變換顏色,由於 D9 和 Buzzer 共用,請將短路套切換到 RGB LED,否則因為D9顏色改變,會持續發出聲響。 11. 接著練習 D2 按鈕開關,當按下,『數位輸入』讀值為 1 ,所以要利用『邏輯』積木來判斷,否則 是利用齒輪 符號展開,使用後,再按一次齒輪符號收回,數值 1 是在『數學運算』積木裡面, 功能是當按下按鈕,則三顆 LED 亮,放開則都熄滅。 12. 繼續修改上述程式,當按下按鈕開關,則 Buzzer(腳位是D9) 發出 Do 聲響,放開則關閉。 變數積木 int = integer 整數型態 D2,從腳位輸入/輸出→數位積木

(6)

6 13. 繼續修改上述程式,改用類比輸入,練習滑桿(腳位是A0,A=Analog類比) 控制 LED 不同亮度,所 以 LED 輸出也要改用類比PWM輸出,但不是每隻腳位都支援類比輸出,數字旁有標示 ~ 才有。 14. 繼續修改上述程式,將 A0 改為 A1,測試『光敏電阻』是否正常,用手稍微遮住光敏電阻,觀察 LED 亮度不同的變化。 15. 繼續修改上述程式,將 A1 改為 A2,測試『麥克風』是否正常,當發出聲響越大聲,LED 越亮。 16. 利用積木範例,選擇『七段顯示器』,修改 clk 時脈與 data 資料腳位,硬體連接方式如下圖,WiFi 先暫時不要連接。 17. 修改上述程式,加入『感測器→超音波』積木,設定 Echo 迴音腳位為D12、Trig 觸發腳位為D13。

18. 利用積木範例,選擇『I2C LCD 顯示器』,所謂I2C(Inter-Integrated Circuit,積體電路匯流排,唸成 "I-two-C")是一種串列通訊匯流排,利用 SCL 和 SDA 兩條控制線進行串列傳輸,其中 SCL 提供 時脈信號,而 SDA 則是負責傳輸數據信號,由於 I2C 是根據裝置位置傳遞資料,每個裝置位置均

(7)

不同,所以不用設定腳位編號,LCD 顯示器背面有個旋鈕可以調整亮度。

19. RFID(Radio Frequency Identification system)是「無線射頻辨識系統」,是一種非接觸式的自動識別技 術,需要自行安裝資料庫,否則無法編譯,下載位置 https://www.arduinolibraries.info/libraries/mfrc522, MFRC522-1.4.0.zip 解壓縮檔案後,將裡面的 MFRC522-1.4.0 資料夾複製到步驟5的地方,注意不要 兩層同名資料夾,或是直接利用『Extract here 解壓縮到這裡』,由於積木式不支援RFID,所以必須 直接利用 Arduino 的檔案→開啟→ MFRC522-1.4.0\examples\ReadNUID\ReadNUID.ino,該程式目的是 透過右上方的監控視窗,即可顯示 RFID 識別碼內容,請將結果先抄寫記錄下來。

圓形

方形卡片

(8)

8 20. 時間模組DS-3231 使用 A4/A5 腳位,也是屬於 I2C 連接方式,需要自行安裝資料庫,否則無法編 譯,下載位置 https://www.arduinolibraries.info/libraries/ds3231, 21. 將現在時間儲存於時間模組DS-3231方式 ThingSpeak 雲端平台說明 物聯網平台有些需要付年費,功能當然較齊全,也無太多限制,若只想實際上傳測試練習,建議使 用免費又操作簡單的 ThingSpeak 平台,每個通道 channel(相當專案名稱)最多僅能上傳 8 種感應器的值, 除了可以提供圖形化分析,亦可匯出詳細資料,這對於一般讀者應該綽綽有餘,若還是不夠使用,可再 新增一個專案解決。 在開始這個計劃之前,首先必須註冊一個 thingspeak 帳號,網址是 https://thingspeak.com,進入網 站後,看到主頁如下圖,若曾經註冊為會員,直接按上方的 登入,直接跳到步驟 3,假如從未註 冊過,則先點選 ,以建立一個新帳號,只要根據底下幾個操作步驟即可完成。

(9)

 步驟 1:填寫下圖相關資料,E-mail 務必填寫正確,因為待會要去所填 E-mail 點選啟動信,密碼要 求 8~50 個字元,其中至少要大、小寫與數字各一個,其他欄位就隨便填填即可,資料都填寫完畢 後,記得將最下方的 『  I accept the Online Services Agreement』勾選,然後按 繼續。

 步驟 2:看到下圖是要通知讀者去 E-mail 收啟動信,收到後按下紅色箭頭的超連結,即可註冊完 畢。  步驟 3:回到首頁按上方的 登入,先填入註冊的 E-mail → → 密碼 → → 。 隨便填 隨便填 密碼 會標示在Author 作者

(10)

10  步驟 4:第一次使用會詢問使用用途,隨便填一個即可,不會去驗證,而第 2 個問題可以不用回答, 最後按最下方的 。  步驟 5:當登入後,先按 ,在 thingspeak 中,每個 channel 通道最多可以指定 8 個欄位, 分別是 Field 1 ~ Field 8,要先勾選,方可填入欄位名稱,欄位名稱不支援中文,且至少使用一個欄 位,最上方的 Name 是指專案名稱,務必填寫。 專案名稱(必填) 欄位名稱 描述(不用填)

(11)

 步驟 6:若有任何資料修改,最後記得按最下方的 ,當可以看到下方畫面,表示已經建 立完畢,其中 Channel ID 通道編號是雲端平台系統產生,不會發生重複,未來只要知道通道編號, 就可隨時查看歷史紀錄,可複製 Description 欄位網址 https://thingspeak.com/channels/561347,其中 561347 是系統隨機產生,且是獨一無二。

 步驟 6:有這麼多人都在同時使用thingspeak,怎麼確定資料不會上傳到別人的帳號,關鍵就在於每 個Channel 的 API Keys,都是獨一無二的超長密碼,所以先切換到 API Keys 分頁,裡面有兩組 API Keys,我們僅須按 CTRL+C 複製『Write API Key』的內容,這個內容待會要貼到積木裡面,若要

重新產生一組新密碼,可按下方的 產生。

 步驟 7:若希望其他人都可以看到分析資料的內容,先切到『Sharing 共享』分頁,如下圖所示,點

選 『 Share channel view with everyone共享給每個人』設為共用,不須再按儲存確認,接著任

匯出資料 通道編號

(12)

12

何人只要輸入https://thingspeak.com/channels/xxxxx 網址,其中 xxxxx 就是 Channel ID 編號,然後就 可以看到分析結果,若是採用預設值『 Keep channel view private 僅私人檢視』,當別人進入指定 的網頁,只會顯示『This channel is not public 不是公用』訊息,無法觀看分析結果,除非對方知道 上述步驟的 Read API Keys 才可看到,若是選擇『 Share channel view only with the following users:』,則可透過加入 E-mail 方式,僅提供特定人士查看。

 實際分析資料 (https://thingspeak.com/channels/561347)

Public 公用 Private 私人

(13)

註:圖表分析樣式若欲修改,可按 ,如下圖所示,修改 Type 型態選項,然後再實際觀察不同 的呈現方式。  當欄位的資料太久沒用或是資料量太多,而欲清除之前歷史紀錄,可按『Channel Settings → 最下 方的 → 確定』。  若欲切換到其他專案,可按『Channels → My Channels』,點選專案名稱,若欲新增其他專案,可按 圖示即可。  若想使用手機 APP 直接查看通道內容,請輸入『thingspeak』關鍵字,安裝後,出現贊助訊息,請 按『Not now』先使用試用版,接著按『Add channel』旁邊的加號。

尚未選擇 通道編號

(14)

14

 接著請輸入通道編號,要注意是原始權限的設定為公用,要先勾選『Public』,才可按『Search 搜尋』, 若是沒有勾選『Public』,則下方 API key 需再輸入對方提供的 Read API Keys 的授權密碼,方能按 下『Search 』 按鈕,如果找到就可以清楚看到通道裡面各欄位名稱。

 利用上述方式可以新增許多通道編號,當點選該通道時,即可看到最新資料。

 當按下右上方 圖示,會出現 Settings ,點擊之後如左下圖所示,如果不想出現最後一筆資料內 容,只要將『overlay charts with last value』取消勾選即可;如果要定時更新,將 Auto refresh charts 勾選,然後設定每隔多久自動更新,最後按確定即可。 最後一筆資料內容 重新整理 新增通道 設定

(15)

22. 修改motoduino積木範例的 Thingspeak 如下圖,開始進入物聯網 IoT (Internet of Things) 的世界。

23. 利用 → Export 匯出 → Download,可下載 csv 檔案,用 Excel 開啟。

(16)

16 IFTTT 發送 LINE 訊息通知

1. 所謂 IFTTT = IF This Then That 是一種網路服務平台,如果『This』觸發(Trigger)的條件成立,就執 行『That』的任務,非常適合防盜或緊急通知,因為一般防盜系統的實作,只能透過硬體裝置或網 頁顯示,若真的發生緊急狀況要處理,是無法真正主動知道,但透過 IFTTT 服務,只要發現特殊 狀況,就可以透過常用的 LINE 接收信息,除了 LINE 以外,IFTTT以串接了許多知名平台的服務, 例如 Gmail、Twitter、Facebook...此,所以透過 IFTTT 可直接串接許多社群網站所提供的服務。 2. 首先進入 ifttt.com 網址,進入之後,個人是習慣直接用 google 帳號登入,不用額外註冊。

3. 右上方的意思是為了幫助您獲得個性化建議,請隨便選擇至少經常使用的以下3項建議,這樣底部

才會出現 『continue』繼續,接著會出現一些相關介紹,可按右上 X 關閉跳過。

(17)

5. 按下右上方的『New Applet』按鈕。

6. 點擊『+this』進行設定觸發條件。

7. 接著選擇哪種服務,在搜尋欄位 Search services 輸入『web』即可看到『Webhooks』服務。

(18)

18

9. 點選『Receive a web request 接收 web 請求』。

10. 接著輸入觸發事件的名稱 Event Name,該名稱要記起來,待會最後測試與 motoduino IFTTT 積木 會用到,最後按『Create trigger 建立觸發』按鈕。

11. 當觸發條件設定後,接著要指定觸發後要做甚麼,按『+ that』開始設定。

12. 若想條件觸發後,是透過 LINE 自動收到通知,則搜尋欄位輸入『line』,然後點選下方 LINE 圖示。

13. 按下『Connect 連接』按鈕,接著開啟 LINE 帳號新視窗,因為當使用者第一次選擇 LINE 服務時, IFTTT 才會要求綁定 LINE,所以底下步驟13~20只要做這一次即可。

(19)

14. 按下『同意並連動』按鈕,接著讀者的 LINE Notify 會收到『已完成與「IFTTT」的連動。請將此

帳號邀請至欲接收訊息的LINE群組中。』通知,其中 Notify 就是通知的意思。

(20)

20

16. LINE 預設通知三筆欄位的資料,同時允許中文內容,按最下方『Create action 增加動作』按鈕。

17. 最後確認資料無誤後,務必按下最下方的『Finish 完成』按鈕。

(21)

19. 點選『Documentation 文件檔案』按鈕。

20. 下方『{event}』是指在步驟10觸發事件的名稱 Event Name,同時輸入任意三個值,包括中文信息亦 可,按下『Test It』測試,如果觸發事件的名稱錯誤,則 LINE 就無法收到通知。

註:上述獨一無二 webhooks 的通行碼是綁定剛才指定的 LINE 帳號,只要設定一次即可,未來如 果使用在任何硬體裝置,只要有支援 IFTTT 都可以使用。

(22)

22

21. 修改範例積木的IFTTT實作,當按下按鈕開關,增加D10點亮,同時在 LINE 送出A0、A1、A2的讀 值通知,傳遞資料 Value1~3 在此只能傳送『數值』型態,由於傳輸需要一點時間,務必加入延遲, 若時間太短,會造成只可傳送一次資料,按下第二次就無法正常傳送。

步驟20 webhooks 的通行碼

步驟10 觸發事件的名 稱

(23)

利用 Google Form 表單紀錄雲端打卡系統 1. 先登入 google 帳號,按右上方 圖示,選擇『雲端硬碟 → 新增 → 更多 → Google 表單』。 2. 新 增 一 個 雲 端 監 控 系 統 表 單 , 欄 位 標 題 可 以 自 訂 , 然 後 請 複 製 該 網 址 https://docs.google.com/forms/d/1aKSqeEI1Bx2iRMkHjcKhvSi-coc6B7BWTXmWSSA7K1o/edit,上述 灰階網底即為該表單獨一無二的『通行碼』,未來的程式碼編輯會用到,然後按下 圖示預覽。 3. 在亮度回答的欄位上方按滑鼠右鍵→檢查,觀察進入點 entry.1719259940,後面的數字可視為該欄 位的通行碼 entry ID,也是獨一無二,這樣才知要上傳資料到哪一個欄位,依照同樣方式,觀察噪 音的 entry ID = entry.1274744470 4. 若想要透過網址就將資料自動填入,複製步驟2的網址,最後面的edit編輯去掉,改為formResponse 表單回應,問號 ? 之後代表參數的傳遞,假設亮度與噪音的值分別是123與456,&是連結符號,前 後不可以加任何空白字元,最後面 submit 是提交的意思,網址輸入後,切回表單,選擇『回覆』 確認是否已經將123與456建立,未來可以按右上方的 建立試算表 Excel,完整的網址為 https://docs.google.com/forms/d/1aKSqeEI1Bx2iRMkHjcKhvSi-coc6B7BWTXmWSSA7K1o/formResponse?entry.1719259940=123&entry.1274744470=456&submit=Su bmit ,建議將該網址複製到記事本。

(24)

24

5. 當 Google 表單設定確認無誤後,接著要透過 PushingBox 雲端服務的API,將步驟4的網址從 Arduino 推播傳送給 Google 表單,未來便可以從電腦或各式手持裝置觀察表單內容。

6. 進入 www.pushingbox.com 網址,按『Login with Google』用 google 帳號登入,再按『My Services』。

建立試算表 建立試算表

(25)

7. 按下 按鈕,新增一個服務。

8. 接著要選擇服務項目,因為 PushingBox 尚無直接支援 google 表單,所以選擇最後的『CustomURL』 自訂服務,按下右方的 『Select this service』選擇這個服務按鈕。

(26)

26

9. 服務的名稱 GoogleFormTest 可以自訂,而 Root URL 則貼上步驟4前面的網址,不含 ? 後面參數 傳遞的內容,然後按『Submit』提交。

10. 在服務項目最下面就會多一個 GoogleFormTest 服務,若有異動按右側『Edit』編輯。

11. 至於 & 後面資料如何傳遞,切換到『My Scenarios』建立腳本,同樣輸入一個自訂名稱,然後按 『Add』。

(27)

12. 建立腳本之後,複製 DeviceID 後面的數字『vD7EDB3AADD582A0』到記事本,待會 Arduino 呼 叫 PushingBox 會用到,然後按下『Add an Action』增加一個動作,準備設定這個腳本要做甚麼事。

13. 按剛剛設定的腳本名稱右方『Add an action with this service』按鈕。

14. 複製步驟4後半段『?entry.1719259940=123&entry.1274744470=456&submit=Submit』,其中固定的123 與456變成變數型態,方法是變數前、後面都加『$』錢號,例如 $light$ 與 $noise$,因此 Data 欄 位為『?entry.1719259940=$light$&entry.1274744470=$noise$&submit=Submit』,然後按『Update』。

(28)

28

15. 切換到 API 頁籤,拉到下方網頁,點選 Arduino Wifi board 下方的『View code』按鈕。

16. 上述範例還是稍嫌複雜,對於非電子或資訊類讀者,建議直接開啟 GoogleForm-PunchInSystem.ino 範例,然後修改底下所列幾處的程式碼較為簡單,未提到的變數名稱建議不要異動,繼續沿用。  第41行前面是 Wi-Fi SSID 名稱,後面是 Wi-Fi 密碼

 第57行是人數,61行前面是 RFID,內容請參閱P7,後面是持卡的員工編號,不支援中文。 57 #define PASSID_COUNT 2

61 {0xD6,0xAD,0x83,0x73, "1070001"}, {0x16,0xC3,0xAC,0x12, "1070002"}

 device= 後面的數字複製步驟12內容,兩個 light 與 noise 變數名稱參閱步驟14,名稱可自訂, 但兩者務必要一致,僅前面要加『&』,不是前後加 $ ,這兩行原本是一行因為太長才分開

17. 觀察 Google 表單『回覆』內容,欄位1是員工編號,欄位2是打卡時間(同時顯示於七段顯示器),切 到『個別』頁籤可以看得更清楚,若有編輯權限,亦可刪除所有回應。

名稱可隨時自訂, 和程式碼變數無關

(29)

18. 按右上方的 建立試算表 Excel,是否發現有自動增加『時間戳記』,所以不一定要利用時間模組 DS-3231 紀錄打卡時間,而且時間模組 DS-3231,經過一段時間,累積的誤差會越來越大。 19. 如果紀錄想讓任何人都可以隨時查看,就要變更權限,回到雲端硬碟視窗,在表單檔案上方按右鍵, 選擇『共用 → 變更 → 開啟‧‧‧ → 儲存 → 完成』,但要注意若是編輯者,則可以查看及刪除 表單所有回應,所以在實際應用上不建議如此使用,在此僅為了操作示範才公開。 20. 分享方式除了透過超長的URL分享,亦可利用 gg.gg 轉址 http://gg.gg/PunchInSystem

(30)

30 21. 程式碼若有興趣研究修改,請自行參閱,若看不到行號,請按『檔案→偏好設定→勾選顯示行號』 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #include "motoWiFiEsp.h" #include <SoftwareSerial.h> SoftwareSerial esp8266_Serial(3,2); #include <motoTM1637.h> WiFiEspClient esp_client;

int connect_status = WL_IDLE_STATUS; TM1637 tm1637led_4_7(4,7); #include <Wire.h> #include "ds3231.h" #define BUFF_MAX 128 uint8_t time[8]; char recv[BUFF_MAX]; unsigned int recv_size = 0;

unsigned long prev, interval = 5000;

#include <SPI.h> #include <MFRC522.h>

#define SS_PIN 10 #define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

void setup() { //Serial.begin(9600); esp8266_Serial.begin(9600); pinMode(4, OUTPUT); pinMode(7, OUTPUT); WiFi.init(&esp8266_Serial); if(WiFi.status()==WL_NO_SHIELD) { Serial.println("Esp8266 module no present"); while(true);

}

while(connect_status != WL_CONNECTED) { Serial.println("Connect to router...");

connect_status = WiFi.begin("ipoe","12345678"); }

Wire.begin();

DS3231_init(DS3231_INTCN); memset(recv, 0, BUFF_MAX);

SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522

(31)

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 } int g_nPreMin=0; typedef struct {

const int nCarID[4]; String EmployeeID; }CARD_ID; #define PASSID_COUNT 1 CARD_ID nPassInfo[PASSID_COUNT]= { //同時紀錄員工的RFID卡號和員工編號(1070001) {0xD6,0xAD,0x83,0x73, "1070001"}, {0x16,0xC3,0xAC,0x12, "1070002"}

//Others employees' RFID Card ID... };

void loop() {

char in;

char buff[BUFF_MAX]; unsigned long now = millis(); struct ts t;

int8_t nTimeItem[4]={0,0,0,0};

// show time once in a while

if ((now - prev > interval) && (Serial.available() <= 0)) { DS3231_get(&t); if(t.hour>=10) nTimeItem[0]=t.hour/10; nTimeItem[1]=t.hour%10; if(t.min>=10) nTimeItem[2]=t.min/10; nTimeItem[3]=t.min%10; if(g_nPreMin==0 || g_nPreMin!=t.min) { tm1637led_4_7.clearDisplay(); tm1637led_4_7.display(nTimeItem); g_nPreMin=t.min; } prev = now; }

if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {

byte *id = rfid.uid.uidByte; unsigned int nPos=0, i=0;

(32)

32 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

for (i = 0; i < PASSID_COUNT; i++) {

//比對是否為員工的RFID卡ID

if(id[0]==nPassInfo[i].nCarID[0] && id[1]==nPassInfo[i].nCarID[1] && id[2]==nPassInfo[i].nCarID[2] && id[3]==nPassInfo[i].nCarID[3]) { analogWrite(5, 255); //若比對成功,則亮綠燈告知 if (esp_client.connect("api.pushingbox.com",80) != 0) { DS3231_get(&t); String szPunchInTime=String(t.hour)+":"+String(t.min); String szEmployeeID=nPassInfo[i].EmployeeID;

String restapi_request = "GET

/pushingbox?devid=vD7EDB3AADD582A0&light="+szEmployeeID

+"&noise="+szPunchInTime+" HTTP/1.1\r\nHost: api.pushingbox.com\r\nUser-Agent: Arduino\r\n\r\n"; esp_client.print(restapi_request); esp_client.stop(); } delay(1000); analogWrite(5, 0); break; } } rfid.PICC_HaltA(); } } 註1:I2C可以同時控制多個裝置,因為大家位置不同,所以時間模組與LCD 可以並接在一起,若不會用電烙鐵焊接,不妨直接購買 RJ-11 電話轉接 頭1分2母,如下圖所示,LCD要如何融入上述程式??建議先用積木範例 的LCD程式碼,轉成 Arduino 碼,複製所需要程式碼即可。 //LCD 宣告於最前面 #include <motoLiquidCrystal_I2C.h> LiquidCrystal_I2C mylcd(0x27,16,2); //LCD 設定於 void setup() 裡面 mylcd.init(); mylcd.backlight(); //LCD 顯示內容於偵測到 RFID 裡面 mylcd.clear(); DS3231_get(&t); mylcd.setCursor(0,0);

if(t.hour >= 10 && t.min >= 10) {mylcd.print("Now Time = " + String(t.hour)+":" + String(t.min));} if(t.hour <10 && t.min <10) {mylcd.print("Now Time = 0" + String(t.hour)+":0" + String(t.min));} if(t.hour >= 10 && t.min <10) {mylcd.print("Now Time = " + String(t.hour)+":0" + String(t.min));}

(33)

if(t.hour <10 && t.min >= 10) {mylcd.print("Now Time = 0" + String(t.hour)+":" + String(t.min));} mylcd.setCursor(0,1);

參考文獻

相關文件

2.報名路徑:進入「台灣就業通」網站首頁→選擇首頁中「找課程」→「職前訓練 網」→「課程查詢」→「查詢/報名」→查詢條件(擇一輸入關鍵字即可)設定:「開

在數位系統中,若有一個以上通道的數位信號需要輸往單一的接收端,數位系統通常會使用到一種可提供選擇資料的裝置,透過選擇線上的編碼可以決定輸入端

星雲大師演講中常提到「我是佛」的觀念,在佛學理論中談「眾

「電子郵件( mydlink 帳號名稱)」請輸入您的 Email 地址,此 Email 地址就是未來登入 mydlink

回答: 1、臨櫃講習時雇主或代講習人員,需至公立就業服務機構參加。參 加講習人員可於聘前講習系統上先行預約,於預約時間至公立就

而使影像設計工具在操作時呈現非預設的結果。為此操作者可以利用重設 Photoshop 軟體

(三) 「愛,就是在別人的需要上,看到自己的責任」