엔코더모듈

엔코더모듈

Makerist 0 637


#define CLK 2    // CLK 핀을 2번으로 정의
#define DT 3     // DT 핀을 3번으로 정의
#define SW 4     // 버튼 핀을 4번으로 정의


int counter = 0;                // 회전 카운터
int lastCLKState = LOW;         // 이전 CLK 상태
int buttonState = HIGH;         // 버튼 상태
unsigned long lastDebounceTime = 0;  // 마지막 디바운스 시간
unsigned long debounceDelay = 50;     // 디바운스 지연 시간


void setup() {
  pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  pinMode(SW, INPUT_PULLUP);  // 내부 풀업 저항 사용
  Serial.begin(9600);
}


void loop() {
  // 버튼 디바운싱
  int reading = digitalRead(SW);
  if (reading != buttonState) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW) {
        Serial.println("버튼 눌림!");
      }
    }
  }


  // CLK 신호 읽기
  int CLKState = digitalRead(CLK);


  // CLK 신호가 변경되었는지 확인
  if (CLKState != lastCLKState) {
    if (digitalRead(DT) != CLKState) { // DT 신호 확인하여 회전 방향 결정
      counter++;
      Serial.println("시계방향 회전");
    } else {
      counter--;
      Serial.println("반시계방향 회전");
    }
    Serial.print("Counter: ");
    Serial.println(counter);
  }


  // 현재 CLK 상태를 이전 상태로 업데이트
  lastCLKState = CLKState;
}

0 Comments