출처: 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!");
}
}