【Arduino】旋转编码器的Arduino使用方法 - Alex Leo

应用CRT余地的工夫,装束余地的时辰用独身圆盘转动和点击的办法就可以造成选择卡特尔和修正设置项的值,比多个电钮手巧的得多。

鼠标轮也买卖的办法。,旋转 点击,这公正的独身辨别的面貌。最近的在网上买了旋转编码器模块,想在实践终于中应用它。在互联网网络上寻觅少量通讯,与实验有关的被发现的人行为准则几乎有成绩。。终于决议本人研究一下旋转编码器的法制,但是高程度和低程度应该是简略的。

我买的旋转编码器模块有5个引脚,使杰出为VCC。, GND, SW, CLK, DT。内幕VCC和GND用于衔接电源和接地。,搁浅缩写,SW应该是软鞭子(软鞭子)、记录是记录(记录)、DT是资料(资料)。

互联网网络上的通讯责怪梦想,尽管行为准则责怪梦想。,但引见的信条主要缺乏成绩。。旋转编码器的买卖是旋转和控制螺杆,旋螺杆强迫征兵时SW销的程度交换,旋转时,CLK和DT的程度有法制地交换。。在但是电源的使习惯于下,咱们率先测引脚电平I的交换。,缺乏波形图不可防止的用安伏欧计来测。。

点击:SW(白色) GND(黑色)控制和假释电钮缺乏少数交换。,当VCC(白色) SW(黑色)松动时,精准定位0,按高电平。据此磋商,SW通常是高阻态。,压地。用Arduino检测的办法是设置衔接SW的引脚为INPUT并上拉出口高电平,引脚是低的,以训令电钮被按下。,上面的行为准则可以正确地检测电钮的更改。

//限制引脚衔接int SW= 4;  // SW->D4bool lastButtonStatus = false;
 
void setup()
{
  pinMode(SW, 输出)
  digitalWrite(SW, 高)//衔接电钮的引脚设置为上拉。
  (9600);
}
 
void loop()
{
  bool buttonStatus = !digitalRead(SW);//高电不压,地区是虚伪的if (buttonStatus != lastButtonStatus)
  {
    (buttonStatus ? "pressed" : "released");
    lastButtonStatus = buttonStatus;//同意以后资格  }
  delay(100);
}

旋转:CLK(白色) GND(黑色),每个旋转与面貌有关。,电平替换一次,DT(白色) GND(黑色),这种交换与先前的使习惯于是分歧的。,CLK和DT的程度是分歧的。VCC(白色) CLK(黑色),VCC(白色) DT(黑色)是同一种使习惯于。CLK(白色) DT(黑色)或CLK(黑色) DT(白色),每回旋转(和面貌有关)操纵特权市轻率地对待滑块。,两个使结合操纵的轻率地对待面貌相反。。后记:CLK和DAT引脚的每个旋转程度将使变换。,程度交换具有工夫差,但在哪个面貌上无法区别。

构图与实验有关的行为准则,按下电钮时读取CLK和DT的值:

 1//限制引脚衔接 2int CLK = 2;//CLK->D2 3int DT = 3;//DT->D3 4int SW = 4;//SW->D4 5 6void setup()
 7{
 8  pinMode(SW, 输出)
 9   digitalWrite(SW, 高)//衔接电钮的引脚设置为上拉。10  pinMode(CLK, 输出)
11  pinMode(DT, 输出)
12   (9600);
13}
1415void loop()
16{
17if (!digitalRead(SW)) //按下电钮时读取CLK和DT的值18  {
19int clkValue = digitalRead(CLK);//读取CLK引脚的电平20int dtValue = digitalRead(DT);//读取DT引脚的电平21     Serial.print("CLK:");
22    Serial.print(clkValue);
23     Serial.print("; DT:");
24    (dtValue);
25     delay(1000);
26  }
27 }

与实验有关的被发现的人正转的或逆时针方向的旋转。,每回按下电钮,CLK和DT读取的值都是完全相同的事物的。,而且两个使结合脚步当中的值是辨别的。,适合安伏欧计测得的终于。

在测安伏欧计时,被发现的人在必然的工夫差。,DT的值可以在ARDUNO在CLK次序读取。,判定可以被找到。经过断球0更改CLK上的监听次序更改,读取CLK和DT的电平值:

 1//限制引脚衔接 2int CLK = 2;//CLK->D2 3int DT = 3;//DT->D3 4constint interrupt0 = 0;// Interrupt 0 在 pin 2 上 5 6void setup()
 7{
 8  pinMode(CLK, 输出)
 9  pinMode(DT, 输出)
10   attachInterrupt(interrupt0, ClockChanged, 交换)//设置断球0的处置效能,电平使变换春季11   (9600);
12}
1314void loop()
15{
16}
1718//断球处置应变量19void ClockChanged()
20{
21int clkValue = digitalRead(CLK);//读取CLK引脚的电平22int dtValue = digitalRead(DT);//读取DT引脚的电平23   Serial.print("CLK:");
24  Serial.print(clkValue);
25   Serial.print("; DT:");
26  (dtValue);
27 }

正转的旋转一步:

正转的旋转3个脚步(由程度线断绝):

3步逆时针方向的旋转(由程度线断绝):

搁浅下实验终于,每回旋转春季的断球编号不分歧。,能够是五金器具亲自。,肖像电钮摇晃。屡次实验后,检查每个更改的基本原理一组值,CLK和DT的值与正转的旋转不分歧。,CLK和DT的值与正转的旋转完全相同的事物。。修正行为准则,按正转的计数值加1,逆时针方向的减去1,按电钮计数数值为零。

 1//限制引脚衔接 2int CLK = 2;//CLK->D2 3int DT = 3;//DT->D3 4int SW = 4;//SW->D4 5constint interrupt0 = 0;// Interrupt 0 在 pin 2 上 6int count = 0;//计数值 7int lastCLK = 0;//CLK历史付出代价 8 9void setup()
10{
11  pinMode(SW, 输出)
12  digitalWrite(SW, 高)
13  pinMode(CLK, 输出)
14  pinMode(DT, 输出)
15   attachInterrupt(interrupt0, ClockChanged, 交换)//设置断球0的处置效能,电平使变换春季16   (9600);
17}
1819void loop()
20{
21if (!digitalRead(SW) && count != 0) //读取到电钮按下而且计数值不为0时把撬毛机明亮的22  {
23     count = 0;
24     Serial.print("count:");
25    (伯爵)
26  }
27}
2829//断球处置应变量30void ClockChanged()
31{
32int clkValue = digitalRead(CLK);//读取CLK引脚的电平33int dtValue = digitalRead(DT);//读取DT引脚的电平34if (lastCLK != clkValue)
35  {
36     lastCLK = clkValue;
37     count += (clkValue != dtValue ? 1 : -1);//1当CLK和DT辨别意时,别的,- 138     Serial.print("count:");
39    (伯爵)
40  }
41 }

与实验有关的被发现的人佼佼者工夫都可以正交的出口:


偶然快速的旋运动责怪很滑溜。,这时,你可以认为两个台阶当中的使有球形突出物。。可以看出,在引脚当中衔接滤波蓄电器是较好的的。,实践与实验有关的缺乏被发现的人少数改良。。磋商由于使有球形突出物是D字,当你用手旋转时,会有独身图象不稳定。,装载使有球形突出物盖后应防止。。

旋转编码器可以用于需求精密装束值(分压器不精确),买卖卡特尔及另外理由。后续会应用旋转编码器进行少数小圆点,也迎将全部分享旋转编码器相干行为准则。