본문 바로가기

카테고리 없음

(아두이노) 로터리 엔코더 기본 스케치

출처: https://www.youtube.com/watch?v=_3q8ZIrVaxo

 

#define CLK 5 
#define DT  4
#define SW 3

int counter = 0;    // 회전한 칸 수 
int lastCLK = HIGH; // 이전 CLK 값
int curCLK;         // 현재 CLK 값

void setup() {
  Serial.begin(9600);
  pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  pinMode(SW, INPUT_PULLUP);
}

void loop() {
  curCLK = digitalRead(CLK);
  if (curCLK != lastCLK) {  // 이전 CLK값과 지금 CLK값이 같지 않다면 로터리가 한 칸 돌았다는 의미
    int dt = digitalRead(DT);
    if (dt != curCLK) {  // 시계 방향으로 돌았다면
      counter++;
    } else {             // 시계 반대방향으로 돌았다면
      counter--;        
    }
    Serial.print(counter);
    Serial.print("\tdt = ");
    Serial.print(dt);
    Serial.print("\tcurCLK = "); // dt와 clk값이 같은지 다른지 파악해보자
    Serial.println(curCLK);
  }
  lastCLK = curCLK;

  if (digitalRead(SW) == LOW) {   // 버튼이 눌러졌다면
    Serial.println("Button pressed!");
  }
}