嵌入式 Arduino 旋转编码器驱动 正反转检测(稳定去抖动)

在工作中需要用到旋转编码器,发现按照百度上的例子正反转检测抖动非常厉害,所以经过一天反复测试重写了一个,纯软件去抖动简单易理解,废话不多说,直接贴码。

点击此处下载例程序

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,非常稳定。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44291381/article/details/114985057