按鈕開關、數位讀入、if else 條件判斷

按鈕開關常用接法(低態動作)

按鈕開關使用內部拉上電阻
按鈕開關使用外部拉上電阻

實驗板4×4陣列開關(低態動作)

實驗板4×4陣列開關
接點說明
pinMode(pb, INPUT_PULLUP);     // 宣告pb為輸入腳,並啟用內部拉上電阻
pinMode(pb, INPUT);     // 宣告pb為輸入腳,使用外部拉上電阻

數位讀入(digitalRead)

buttonState = digitalRead(pb);    // pb為按鈕開關接腳,讀取狀態(僅有 HIGH 或 LOW)後儲存於buttonState

if else 條件判斷: if 參考說明else 參考說明

if(條件式)
  程式敘述;
else
  程式敘述;
if(digitalRead(pb) == LOW)
  digitalWrite(LED[0],LOW);
else
  digitalWrite(LED[0],HIGH);
if(條件式)
{
  //程式區塊
}
else
{
  //程式區塊
}
if(digitalRead(pb) == LOW)
{
  digitalWrite(LED[0],LOW);
  digitalWrite(LED[7],HIGH);
}
else
{
  digitalWrite(LED[0],HIGH);
  digitalWrite(LED[7],LOW);    
}
if(條件式)
{
  //程式區塊
}
else if(條件式)
{
  //程式區塊
}
else
{
  //程式區塊
}
if(count == 1)
{
  Serial.println("case 1.");
}
else if(count == 2)
{
  Serial.println("case 2.");
}
else if(count == 3)
{
  Serial.println("case 3.");
}
else if(count == 4)
{
  Serial.println("case 4.");
}
else if(count == 5)
{
  Serial.println("case 5.");
}
else      // 以上皆非
{
  Serial.println("case else.");
}

參考範例:

const int LED[8] = {15, 16, 17, 18, 19, 21, 22, 23};  // 宣告LED為整數陣列,儲存8個LED接腳位置
const int pb = 25;  // 宣告pb為整數,儲存按鈕開關接腳
int count = 0;      // 宣告count為整數變數,儲存按鈕被按下的次數
bool lastButtonState = HIGH;  // 宣告lastButtonState為布林變數,儲存按鈕開關上一次的狀態

void setup() {
  Serial.begin(9600);   // 啟用串列埠監看視窗
  pinMode(pb, INPUT);   // 宣告pb為輸入腳,並使用外部拉上電阻

  for (int i = 0; i <= 7; i++) 
  {
    pinMode(LED[i], OUTPUT);     // 宣告LED[0]~LED[7]其對應的接腳為輸出腳
    digitalWrite(LED[i], HIGH);  // 設定LED[0]~LED[7]其對應的接腳為HIGH
  }
}

void loop() {
  bool buttonState = digitalRead(pb);  // 讀取當前按鈕狀態:未按下(HIGH),按下(LOW)

  // 若按鈕從未按下(HIGH)到按下(LOW)
  if(lastButtonState == HIGH && buttonState == LOW) 
  {
    Serial.println("Button pressed.");
    count++;    // 按鈕次數加1
    Serial.print("Button pressed count: ");
    Serial.println(count);
  }
  // 若按鈕從按下(LOW)到未按下(HIGH)
  else if(lastButtonState == LOW && buttonState == HIGH)
  {
    Serial.println("Button released.");
  }

  lastButtonState = buttonState;  // 更新按鈕狀態
  delay(30);    // 小延遲,避免按鈕重複讀取 (防止抖動)
}

作業練習:

  1. 開機後,8個LED燈全亮,1秒後全滅。
  2. 每按一下按鈕開關,依序循環顯示下列狀態:
    • 單個LED,左去,右回。
    • 單個LED,右去,左回。
    • 3個LED連在一起,左去,右回。
    • 3個LED連在一起,右去,左回。
    • 偶數編號的4個LED燈亮。
    • 奇數編號的4個LED燈亮。
    • 8個LED燈全亮。
    • 8個LED燈全滅。
  3. 每個動作的狀態必須搭配文字說明顯示在監看視窗上。
  4. 在Wokwi網站上進行模擬,並完成實體接線。