// 핀 번호 정의
const int buttonPin = 2;    // 버튼 스위치 핀 번호
const int relayPin = 3;     // 릴레이 신호 핀 번호

// 디바운싱 변수 및 상수 설정
const unsigned long debounceDelay = 50;  // 디바운싱 딜레이 시간 (밀리초)
unsigned long lastDebounceTime = 0;      // 마지막 디바운싱 시간
int buttonState = HIGH;                   // 현재 버튼 상태
int lastButtonState = HIGH;               // 이전 버튼 상태

// 릴레이 상태 변수 초기화
int relayState = HIGH;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);  // 내부 풀업 저항 사용하여 버튼 스위치 설정
  pinMode(relayPin, OUTPUT);         // 릴레이 신호 핀 설정
}

void loop() {
  // 버튼 디바운싱 처리
  int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // 디바운싱 시간이 경과하면 버튼 상태 업데이트
    if (reading != buttonState) {
      buttonState = reading;

      // 버튼이 눌렸을 때
      if (buttonState == LOW) {
        // 릴레이 상태를 토글
        relayState = !relayState;
        digitalWrite(relayPin, relayState);  // 릴레이 상태 업데이트
      }
    }
  }

  lastButtonState = reading;
}

NOCOMNCVCCGNDINLED1PWRRelay Module