Hello World
這部分我們開始進入正式的課程內容,首先從硬體版的 Hello World 開始。
事前準備
- Arduino UNO
- 麵包板
- LED 若干
Arduino UNO
Arduino UNO 是 Arduino 系列中最常被拿來做實驗與開發的板子,它具有便宜、輕便、資源多、模組多等特色,因此非常建議作為 Arduino 的新手入門選擇。
核心晶片為 ATmega328p,其細節規格如下表:
項目 | 規格 |
---|---|
Operating Voltage | 5V |
Input Voltage (recommended) | 7-12V |
Input Voltage (limit) | 6-20V |
Digital I/O Pins | 14 (of which 6 provide PWM output) |
PWM Digital I/O Pins | 6 |
Analog Input Pins | 6 |
DC Current per I/O Pin | 20 mA |
DC Current for 3.3V Pin | 50 mA |
Flash Memory | 32 KB (ATmega328P)of which 0.5 KB used by bootloader |
SRAM | 2 KB (ATmega328P) |
EEPROM | 1 KB (ATmega328P) |
Clock Speed | 16 MHz |
Length | 68.6 mm |
Width | 53.4 mm |
Weight | 25 g |
話說我每次看到這規格,都會對那 32KB 的 Flash Memory 大為驚嘆啊!
接下來我們進入這次文章的正題,Hello, World!
點亮 LED
嵌入式系統的 Hello World 通常都是用 LED 來做,這有兩個意義,第一是證明程式能夠執行,第二是測試嵌入式系統的晶片是否正常。看似無聊,涵義卻如此之深的 LED。
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Arduino 的板子上都有一顆 LED 在第 13 腳上 // 腳位定義: int led = 13; // Setup 只會執行一次: void setup() { // 將 led 腳位定義為數位輸出 pinMode(led, OUTPUT); // 點亮 LED digitalWrite(led, HIGH); // HIGH = 1 } // loop() = while(1): void loop() { // 不做任何事 } |
如果板子上的 LED 不會亮,有可能是你沒燒錄成功,也有可能是板子損毀,但通常都是程式沒燒好或者是燒錄出問題。
LED 閃爍
在這個範例中我們嘗試讓 LED 閃爍起來,大約每秒鐘會閃爍一次。
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Arduino 的板子上都有一顆 LED 在第 13 腳上 // 腳位定義: int led = 13; // Setup 只會執行一次: void setup() { // 將 led 腳位定義為數位輸出 pinMode(led, OUTPUT); } // loop() = while(1): void loop() { digitalWrite(led, HIGH); // HIGH = 1 delay(1000); // 1000 ms digitalWrite(led, LOW); // LOW = 0 delay(1000); // 1000 ms } |
LED 閃爍之二
慢慢地閃看起來很無聊對吧? 我們來點有趣的。如同警示燈一樣,閃兩下便停一段時間,然後再繼續閃。
程式碼
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 |
// Arduino 的板子上都有一顆 LED 在第 13 腳上 // 腳位定義: int led = 13; // Setup 只會執行一次: void setup() { // 將 led 腳位定義為數位輸出 pinMode(led, OUTPUT); } // loop() = while(1): void loop() { // 用 for 迴圈控制連續兩次的閃爍 for(int i=0;i<2;i++) { digitalWrite(led, HIGH); // HIGH = 1 delay(100); // 1000 ms digitalWrite(led, LOW); // LOW = 0 delay(100); // 1000 ms } // 閃兩次後再等 900ms // 加上迴圈中的 100ms,那就是停了約一秒鐘 delay(900); } |
如果你是初次接觸程式語言,看到 for 迴圈不是很了解是什麼的話,你可以參考這篇文章:程式設計迴圈之章,for。
這星期的內容就到此結束,是否覺得只控制一顆 LED 很無聊呢? 下一回我們將控制更多的 LED,嘗試更多的變化。
可以請問一下 如何用可變電阻 無線控制 LED的code嗎
硬體都有了 可是找不到PWM的無線code怎麼寫 謝謝
懇請教學…
給你流程應該可以吧?
analogRead
讀取可變電阻電壓analogWrite
給 PWM 腳位