Arduino旋转编码器的教程

电子说

1.3w人已加入

描述

步骤1:旋转编码器的脉冲流

编码器

以下旋转编码器产生的脉冲流与上图类似。

步骤2:旋转编码器的引脚排列

说明:

GND-》 GND

+-》 + 5V

SW -》按下时旋转编码器的按钮

DT-》数据

CLK-》数据2

DT之一或CLK引脚必须连接到Arduino Uno的中断脚,或者DT和CLK都连接到中断引脚。

步骤3:示意图

GNDàGND Arduino Uno

+à+ 5V Arduino Uno

SWàPIN 4 Arduino Uno

DT àPIN 3 Arduino Uno

CLKàPIN2 Arduino Uno

第4步:代码

在以下教程中,PI将用作中断Arduino Uno的N 2,而PIN 3仅用作常规输入。

#define encoder0PinA 2

#define encoder0PinB 3

#define encoder0Btn 4

int encoder0Pos = 0;

void setup() {

Serial.begin(9600);

pinMode(encoder0PinA, INPUT_PULLUP);

pinMode(encoder0PinB, INPUT_PULLUP);

pinMode(encoder0Btn, INPUT_PULLUP);

attachInterrupt(0, doEncoder, CHANGE);

}

int valRotary,lastValRotary;

void loop() {

int btn = digitalRead(encoder0Btn);

Serial.print(btn);

Serial.print(“ ”);

Serial.print(valRotary);

if(valRotary》lastValRotary)

{

Serial.print(“ CW”);

}

if(valRotary {

Serial.print(“ CCW”);

}

lastValRotary = valRotary;

Serial.println(“ ”);

delay(250);

}

void doEncoder()

{

if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB))

{

encoder0Pos++;

}

else

{

encoder0Pos--;

}

valRotary = encoder0Pos/2.5;

}

上面草图的第10行用于启用Arduino Uno的2号插针的中断。在“ doEncoder”功能中,由旋转编码器计算得出。如果DT和CLK(Arduino Uno的引脚中断)的值相同,则“ encoder0Pos”变量将增加/添加,除此条件外,“ encoder0Pos”变量将减少。

步骤5:说明

ValRotary值是已运行的步骤数的值。 ValRotary值由旋转传感器编码器读数值除以2.5获得。从测试中获得的值为2.5,因为旋转编码器的一个步骤可能会超过1,因此请根据每个步长以及读取延迟的增加将其值除以2.5。

第19-25行是确定旋转旋转编码器是CW还是CCW的程序。第19-25行的解释是当前的旋转编码器读数大于先前的旋转数据,然后表示为CW。

步骤6:输出

编码器

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分