// --------------------------------------------------------------------------------
/*

05 使用開關按鈕控制 LED 開關 (挑戰的答案)

[學習重點]

1. 認識開關 (Push Button Switch, Slide Switch)
2. 認識 digitalRead

[挑戰]

- 現時要長按按鈕開關 LED 才會亮,能否改成按一下按鈕開關便可以改變 LED 的狀態呢?
(提示:要加入一個新的參數 - ledState)

Created by Jason on 5 Aug 2022.

*/
// --------------------------------------------------------------------------------

int ledPin = 9; // 定義 ledPin 變數並設定適合的 Pin 號
int buttonPin = 2; // 定義接收開關狀態的 Pin 號
int buttonState; // 開關的狀態 (HIGH / LOW)
int ledState = -1; // 決定 LED 的開關狀態

void setup() {
  pinMode(ledPin, OUTPUT); // 設定 ledPin 為輸出模式
  pinMode(buttonPin, INPUT); // 設定 buttonPin 為輸入模式
}

void loop() {
  buttonState = digitalRead(buttonPin); // 讀取開關的狀態 (LOW / HIGH)

  // 當按下按鈕開關便會切換一次 ledState
  if (buttonState == HIGH) {
    ledState = ledState * -1; // 切換 ledState 的狀態 (-1 / +1)
    // 因應 ledState 開關 LED
    if (ledState > 0) {
      digitalWrite(ledPin, HIGH); // ledPin 輸出高電位
    } else {
      digitalWrite(ledPin, LOW); // ledPin 輸出低電位
    }
  }

	delay(100); // 延時 0.1 秒
}