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

07 人體偵測防盗感應器 LED + Buzzer

[學習重點]

1. 認識 PIR Motion Sensor 人體紅外線感應器
2. 認識 Buzzer 蜂嗚器

[挑戰]

- 加入一個 Reset 按鈕開關
- 當觸發警報後需要按 Reset 按鈕才能關閉警報


Created by Jason on 7 Aug 2022.

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

int ledPin = 9; // 定義 ledPin 變數並設定適合的 Pin 號
int buzzPin = 10; // 定義 buzzPin 變數並設定適合的 Pin 號
int pirPin = 4; // 定義接收開關狀態的 Pin 號
int pirState; // 開關的狀態 (HIGH / LOW)

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

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

  // 檢查開關狀態,開關接觸的話發出警報
  if (pirState == HIGH) {
    digitalWrite(ledPin, HIGH); // ledPin 輸出高電位

    // 透過 Buzzer 發出警報聲
    for(int i = 0; i < 255; i = i + 5) {
      analogWrite(buzzPin, i);
      delay(5);
    }
    for(int i = 255; i > 0; i = i - 5) {
      analogWrite(buzzPin, i);
      delay(5);
    }

  } else {
    digitalWrite(ledPin, LOW); // ledPin 輸出低電位
  }

	delay(100); // 延時 0.1 秒
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
r1:1
r1:2
led1:A
led1:C
pir1:VCC
pir1:OUT
pir1:GND
bz1:1
bz1:2