const int ledPin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // LED 핀 번호 배열
const int numLeds = sizeof(ledPin) / sizeof(int); // LED 개수
const int pirPin = 13; // PIR 핀 번호
int pirState = LOW; // PIR 상태
int prevPirState = LOW; // 이전 PIR 상태
unsigned long previousMillis = 0; // 이전 밀리초
const unsigned long interval = 5000; // 5초 // 인터벌: 30분(1800000밀리초)
int ledOnCount = numLeds; // 켜져있는 LED 개수
void setup() {
for (int i = 0; i < numLeds; i++) {
pinMode(ledPin[i], OUTPUT); // LED 핀을 출력으로 설정
digitalWrite(ledPin[i], LOW); // LED를 모두 끕니다.
}
pinMode(pirPin, INPUT); // PIR 핀을 입력으로 설정
}
void loop() {
pirState = digitalRead(pirPin); // PIR 상태를 읽음
if (pirState == HIGH && prevPirState == LOW) { // PIR이 감지됨
turnOnLeds(); // LED를 모두 켭니다.
} else if (pirState == LOW && prevPirState == HIGH) { // PIR 감지가 해제됨
// 아무것도 하지 않습니다.
}
prevPirState = pirState; // 이전 PIR 상태를 현재 PIR 상태로 갱신
unsigned long currentMillis = millis(); // 현재 밀리초를 읽음
if (currentMillis - previousMillis > interval) { // 인터벌이 경과함
turnOffLed(); // LED를 하나씩 끄기
previousMillis = currentMillis; // 이전 밀리초를 현재 밀리초로 갱신
}
}
void turnOnLeds() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPin[i], HIGH); // 모든 LED를 켭니다.
}
ledOnCount = numLeds; // 켜져있는 LED 개수를 모두로 초기화합니다.
}
void turnOffLed() {
if (ledOnCount > 0) { // 켜져있는 LED가 있으면
digitalWrite(ledPin[ledOnCount - 1], LOW); // 하나씩 끕니다.
ledOnCount--; // 켜져있는 LED 개수를 1개 줄입니다.
}
}