Arduino 數位輸入實習 (INPUT_PULLUP)

學習如何學習!

設備與材料

個人電腦 × 1
arduino Uno × 1
麵包板 × 1
LED × 8
4×4按鍵 × 1
9pin A型 331排阻 × 1
連接線 若干

電路圖

LED 電路圖
4×4按鍵電路圖

Arduino 實體接線圖

LED 陣列

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:按一次按鈕跑一次來回

單燈跑馬燈來回共8燈

程式

//全域變數

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.了解自定函式

入門
知識
語法
流程
函式
實習

發佈留言