// 旋转编码器的引脚定义
const int encoderPinA = 2;
const int encoderPinB = 3;
// 用于记录编码器的当前状态和上一次状态
int encoderStateA;
int encoderStateB;
int lastEncoderStateA;
int lastEncoderStateB;
// 用于记录编码器的旋转方向和步数
int encoderSteps = 0;
int lastEncoderSteps = 0;
bool encoderDirection;
void setup() {
Serial.begin(9600);
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
lastEncoderStateA = digitalRead(encoderPinA);
lastEncoderStateB = digitalRead(encoderPinB);
}
void loop() {
encoderStateA = digitalRead(encoderPinA);
encoderStateB = digitalRead(encoderPinB);
// 判断编码器的旋转方向
if (encoderStateA!= lastEncoderStateA) {
if (encoderStateA == HIGH) {
if (encoderStateB == LOW) {
encoderDirection = true; // 顺时针
encoderSteps++;
} else {
encoderDirection = false; // 逆时针
encoderSteps--;
}
if (encoderSteps!= lastEncoderSteps) {
Serial.print("Encoder Steps: ");
Serial.print(encoderSteps);
Serial.print(" Direction: ");
Serial.println(encoderDirection? "Clockwise" : "Counter - clockwise");
lastEncoderSteps = encoderSteps;
}
}
lastEncoderStateA = encoderStateA;
}
}