엔코더모듈
Makerist
센서기초
0
636
2024.05.12 12:33
#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; }