写一个EC11旋转编码器消抖程序
时间: 2023-04-09 22:02:55 浏览: 258
STM32F407_EC11.7z
好的,以下是一个简单的EC11旋转编码器消抖程序的示例:
```
// 定义引脚
#define CLK_PIN 2
#define DT_PIN 3
// 定义变量
volatile int encoderPos = 0;
volatile boolean rotating = false;
volatile boolean A_set = false;
volatile boolean B_set = false;
// 中断服务程序
void doEncoder() {
if (rotating) {
delay(1); // 消抖
if (digitalRead(CLK_PIN) == LOW && A_set) {
encoderPos--;
B_set = true;
A_set = false;
}
if (digitalRead(DT_PIN) == LOW && B_set) {
encoderPos++;
A_set = true;
B_set = false;
}
} else {
rotating = true;
delay(1); // 消抖
if (digitalRead(DT_PIN) == LOW) {
B_set = true;
} else {
A_set = true;
}
}
}
void setup() {
pinMode(CLK_PIN, INPUT_PULLUP);
pinMode(DT_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(CLK_PIN), doEncoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(DT_PIN), doEncoder, CHANGE);
Serial.begin(9600);
}
void loop() {
Serial.println(encoderPos);
delay(100);
}
```
这个程序使用了中断来检测旋转编码器的旋转,同时也加入了消抖功能,可以有效地避免误触发。注意,这个程序只是一个示例,具体的实现可能需要根据实际情况进行调整。
阅读全文