設備與材料
個人電腦 × 1
arduino Uno × 1
麵包板 × 1
LED × 8
4×4按鍵 × 1
9pin A型 331排阻 × 1
連接線 若干
電路圖
Arduino 實體接線圖
LED 陣列
上圖是將10個LED包裝成IC形式的LED陣列,接腳正負如何判斷呢?有文字印刷那面接腳為+,對面接腳為-
功能
本實習用四個按鈕來選擇10燈LED不同跑法, 使用 arduino INPUT_PULLUP 模式,因為 arduino 內部已有上拉電阻接到 5V,所以接線時就不需要上拉電阻,簡化接線。
按 S1 按鈕時,10燈LED 1燈來回跑,每次移動一個燈 延遲時間 100ms
按 S2 按鈕時,10燈LED 2燈來回跑,每次移動一個燈 延遲時間 100ms
按 S3 按鈕時,10燈LED 3燈來回跑,每次移動一個燈 延遲時間 100ms
按 S4 按鈕時,10燈LED 4燈來回跑,每次移動一個燈 延遲時間 100ms
PS:按一次按鈕跑一次來回
程式
//全域變數
const int PB[4] = {10, 11, 12, 13}; //輸入接腳
const int LED[8] = {2, 3, 4, 5, 6, 7, 8, 9}; //輸出接腳
boolean s1; //按鈕狀態變數
void setup() {
//設定 Arduino 輸出接腳
for (int i = 0; i < 8; i++) {
pinMode(LED[i], OUTPUT);
}
//設定 Arduino 輸入接腳
for (int i = 0; i < 4; i++) {
pinMode(PB[i],INPUT_PULLUP);
}
}
void loop() {
s1 = !digitalRead(PB[0]); // 讀取S1按鈕的狀態
if(s1){
led1(100); //呼叫自訂函數 led1
}
}
//1燈走馬燈程式
void led1(int delayTime){
for (int i = 0; i < 7; i++) {
digitalWrite(LED[i], HIGH);
delay(delayTime);
digitalWrite(LED[i], LOW);
}
for (int i = 7; i >= 0; i--) {
digitalWrite(LED[i], HIGH);
delay(delayTime);
digitalWrite(LED[i], LOW);
}
}
上述示範程式僅有按 S1 按鈕時,8燈LED單燈來回跑,每次移動一個燈 延遲時間 100ms,請你自行修改程式改成10燈加上 S2、S3、S4 按鍵功能
進階
你可以更改程式功能,不同按鍵有不同的LED燈變化
相關知識
自定函數
if 判斷式
if else 判斷式
digitalRead 函數
boolean
INPUT_PULL
陣列
for 迴圈
Arduino 複合運算子
const
Arduino Uno 硬體
int
void
setup 函數
loop 函數
pinMode 函數
digitalWrite 函數
delay 函數
學習目標
1.了解輸入接腳 INPUT_PULL 設定
2.了解 if 判斷式
3.了解自定函式
Arduino 輸出實習(單燈閃爍)
Arduino 輸出實習(跑馬燈-愚公移山)
Arduino 輸出實習(跑馬燈-for迴圈)
Arduino 數位輸入實習
Arduino 數位輸入實習(INPUT_PULLUP)
Arduino 類比輸入實習
Arduino PWM 實習 (呼吸燈)
Arduino PWM 實習 (光感應調光燈)
Arduino 8×8 LED Matrix MAX7219 實習
Arduino 紅綠燈小綠人 實習
Arduino 計時器 實習
Arduino 音樂盒
Arduino 電子琴(鍵盤掃描)
Arduino DHT11 溫濕度感應器
Arduino OLED 顯示
Arduino 超音波測距模組 HC-SR04
Arduino 執行時間實習
Arduino 電容測試器
Arduino 紅外線接收實習
Arduino 紅外線發射實習 EPSON 投影機控制
ESP-12F 網路智慧開關(MQTT)
ESP-12F 雲端記錄型 K-Type 溫度計(MQTT ThingSpeak)
ESP-12F 手機雲端紅外線控制
ESP-12F 網路電台收音機
ESP-12F 電子鼓