Categories: Arduino

Arduino Basic (2) – Hello World

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。

程式碼

// 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 閃爍起來,大約每秒鐘會閃爍一次。

程式碼

// 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 閃爍之二

慢慢地閃看起來很無聊對吧? 我們來點有趣的。如同警示燈一樣,閃兩下便停一段時間,然後再繼續閃。

程式碼

// 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,嘗試更多的變化。

duye.chen

View Comments

  • 可以請問一下 如何用可變電阻 無線控制 LED的code嗎
    硬體都有了 可是找不到PWM的無線code怎麼寫 謝謝
    懇請教學...

    • 給你流程應該可以吧?

      1. analogRead 讀取可變電阻電壓
      2. 透過無線模組把讀到的值傳給接收端
      3. 接收端把值放進 analogWrite 給 PWM 腳位

Recent Posts

[教學] 打造你的 NFT 智能合約 – ERC721A

GM!前些日子在幣圈亂玩,一路...

2 年 ago

JavaScript – Singleton 設計模式

前言 在設計程式時,我們有時會...

3 年 ago

PlaidML 讓你的 Mac 也能加速 Tensorflow 機器學習!

相信很多使用 Mac 或者手上...

3 年 ago

RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面 嗨,大家好久不見!...

3 年 ago

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇(一、二)文章,我們...

6 年 ago