# 第03週- IoT 數位及基本指令 ###### tags: `ESP32` `IoT` `基本指令` `數位` 首先了解 ESP32 數位訊號以及相關指令。 --- ## 免費線上模擬器介紹 1. TinkerCAD 電路設計: - 模擬 Arduino 各種開板、各項電子零件和電路 (circuits) - 建立帳戶 (Account creation) - 開始第一專案 (Start your first project) - 交換學習專案 (Exchanging your projects) 2. WOKWI 模擬器: - 免費的線上Arduino, ESP32 和 Raspberry Pi Pico 開發板模擬器 - 建立帳戶 (Account creation) ![](https://hackmd.io/_uploads/H1Ig0LZK2.png) ## 再談上週挑戰題 ### 設計接近實際路口時相的交通燈號 紅、黃、綠 依序啟閉 - 紅 LED 亮兩秒半後關閉,同時亮綠 LED - 綠 LED 亮兩秒後關閉,同時亮黃 LED - 黃 LED 亮半秒後關閉,同時亮紅 LED > 提示 (hint): >- 選擇正確的 ADC(2) 腳位,分別接不同 LED >- delay(1000) 代表延遲一千亳秒 = 一秒 ![](https://hackmd.io/_uploads/HknnyDWth.png) ### Arduino IDE 程式語言 #### 變數(variable) 在程式中代表某個數值的名稱 - 非指令名稱 - 非數字開頭 在宣告時,需要同時定義型態(type) - 決定記憶體大小 ,以及如何運算 如: > - int x = 0; (宣告後馬上指定初使值) >  ALU (arithmetic logic unit) > - float y; > - boolean z = 0; #### 常數(constant) 也可以使用 #define 宣告 數字 int: - const int redLed=15; (開一個16位元的空間) - #define redLed 15 (不佔記憶體空間) 字元 char - #define redLed ‘r’ - 數字為單字母ASCII 的數字序 r = 114 #### Digital Signal (雙向交通燈號) 如何變成有直橫向的交通燈號時序? - 先配雙向的燈號電路 > - 多加一組紅、黃、綠 LED > - 修改上週的程式,測試是否新加的燈會亮? 觀察直橫向的交通燈號時序關係 指令: - 指定全域變數:int - 設定腳位模式:pinMode(pin, OUTPUT) - 輸出訊號:digitalWrite (pin, value) - 輸出訊號持續的時間:delay(millis) 找出規律寫程式 - rLED(2500), gLED(2000), yLED(500) [直向] - gLED2(2000), yLED2(500), rLED2(2500), [橫向] ![](https://hackmd.io/_uploads/Hy_imD-Yh.png) :::success 例題3-1: [[路口紅綠燈(6顆LED)]](https://wokwi.com/projects/359154455039079425) ![](https://hackmd.io/_uploads/B1eYJPWKn.png) ::: ## 為電路加上一個數位開關 輕觸開關 (tack switch)電路設計 - 嵌入式系統架構的電路基礎觀念 (Elementary block diagram of Embedded System Structure for Electrical circuit) > - 何謂嵌入式系統? > - 和 IoT 的關聯性? - 數位訊號輸入接地(digital read grounding) ![](https://hackmd.io/_uploads/ByUVBP-Y3.png) ## 設計第一個有數位開關控制線路 ![](https://hackmd.io/_uploads/H1aJLD-th.png) ![](https://hackmd.io/_uploads/ry1v8P-Kn.png) ![](https://hackmd.io/_uploads/H1acLP-F3.png) :::success 例題3-2: [[單顆按鈕控制LED燈]](https://wokwi.com/projects/359683804297538561) ::: ![](https://hackmd.io/_uploads/S1VRUPWF2.png) ![](https://hackmd.io/_uploads/HkWWvwWK3.png) :::success 例題3-3: [[以 Serial.println 監看單顆按鈕控制LED燈狀況]](https://wokwi.com/projects/359672176169970689) ::: :::success 挑戰題: 按一下開燈,再按一次後,熄燈? 例題3-4: [[按鈕按一次LED亮,再按一次LED滅]](https://wokwi.com/projects/359703829935135745) ::: ## 真實世界需要 debounce ![](https://hackmd.io/_uploads/BkshnwWY2.png) ![](https://hackmd.io/_uploads/HJaxTP-Y2.png) ![](https://hackmd.io/_uploads/SySIaDWF3.png) :::success 例題3-5: [[debounce]](https://wokwi.com/projects/359348886337694721) 例題3-6: [[鈕計次]](https://wokwi.com/projects/359284020104756225) ::: ## 雙開開關設計 程式是否與單開不同? ![](https://hackmd.io/_uploads/HJZ0IFZt2.png) :::info :wink:挑戰題: 能否一個負責”開燈”?另一個負責”關燈”? ![](https://hackmd.io/_uploads/BJ4eDKZFn.png) 例題3-7: [[兩顆按鈕控制LED燈]](https://wokwi.com/projects/359704524594812929) ::: ## 雙開+單向交通燈號 觀察燈號的時序 - if (判斷式) vs. while (判斷式),有何不同? ![](https://hackmd.io/_uploads/SJamFYZt2.png) 挑戰題: - 開燈後,如何再按一次後,即時熄燈? >- 是否需要改電路? ## 雙開+雙向交通燈號 觀察燈號的時序 - if (判斷式)vs. while (判斷式),有何不同? ![](https://hackmd.io/_uploads/SyGZtFWt3.png) 挑戰題: - 如何設計成兩個開關各自掌管一邊的燈號? >- 是否需要改電路? :::info :wink: 來點挑戰吧 1. 單開電路,按一下開燈後,再按一次後熄燈? 2. 雙開關電路,一個負責”開燈”?另一個負責”關燈”? 提示 (hint): 使用兩個 ACD 3. 街口交通號制,如何設計成直、橫向各有一個開關,各自掌管的燈號的明滅? :::