电子说
步骤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
全部0条评论
快来发表一下你的评论吧 !