在工作中需要用到旋转编码器,发现按照百度上的例子正反转检测抖动非常厉害,所以经过一天反复测试重写了一个,纯软件去抖动简单易理解,废话不多说,直接贴码。
Encoder.h
#ifndef ENCODER_H
#define ENCODER_H
#define Enc_CLK 26
#define Enc_DT 25
#define Enc_SW 17
u8 encodeCnt=0;
#endif
Encoder.c
#include "Encoder.h"
void Encoder_Init()
{
pinMode (Enc_CLK, INPUT);
pinMode (Enc_DT, INPUT);
pinMode (Enc_SW, INPUT);
digitalWrite(Enc_SW, HIGH);
attachInterrupt(digitalPinToInterrupt(Enc_CLK), Encode_ISR, CHANGE);
}
void Encode_ISR()
{
bool clkValue = digitalRead(Enc_CLK);
bool dtValue = digitalRead(Enc_DT);
static u8 checkCnt = 0;
static bool lastCLK;
static long timee = 0;
if (lastCLK != clkValue && millis() - timee > 5)
{
lastCLK = clkValue;
if (++checkCnt == 2)
{
checkCnt = 0;
encodeCnt = (clkValue != dtValue ? 1 : -1);
Serial.print("encodeCnt:");
Serial.println(encodeCnt);
}
timee = millis();
}
}
结果,正转敲1,反转敲255,非常稳定。