旋转编码器模块+Arduino=小demo

玩一玩旋转编码器模块

我是代码小白,一个正在做毕设的秃头少年。鄙人拙作,有不当之处,还请指教。

正文 毕业设计已经OK啦,但是买的很多传感器都没用上,现在工作之余一个一个测试下,权当消遣吧。

废话不多说,今天要分享的是旋转编码器模块,虽然感觉并没有什么卵用。

下面是该模块的图片 主要功能: 旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位计,这种转动计数是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从0开始计数。 我觉得用处不是很大,可以用来调节声音之类的吧。

接线: CLK:接Arduino 引脚2 //脉冲信号瞬间捕捉 DAT:接Arduino 引脚3 //脉冲新号持久呈现 SM :接Arduino 引脚4 //BUTTON按钮 VCC:接Arduino VCC GND:接Arduino GND

上代码:

int CLK = 2;      // 脉冲信号瞬间捕捉
int DAT = 3;      // 脉冲新号持久呈现
int SM = 4;       // BUTTON按钮

int COUNT = 0;    //计数器

void setup() 
 {
          
   
  attachInterrupt(digitalPinToInterrupt(CLK), RoteStateChanged, FALLING);//脉冲信号瞬间捕捉,捕获一个下降沿的脉冲信号,中断
  /*
    *语法:
    * attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
    *参数:
    * pin: 中断引脚号
    * ISR: 中断服务程序名
    * mode:中断模式
    *中断模式(mode)有以下几种形式:
    * LOW: 当引脚为低电平时触发中断服务程序
    * CHANGE: 当引脚电平发生变化时触发中断服务程序
    * RISING: 当引脚电平由低电平变为高电平时触发中断服务程序
    * FALLING: 当引脚电平由高电平变为低电平时触发中断服务程序
  */
  
  pinMode(CLK, INPUT); 
  digitalWrite(CLK, HIGH);  // Pull High Restance  
  pinMode(DAT, INPUT); 
  digitalWrite(DAT, HIGH);  // Pull High Restance 
  pinMode(SM, INPUT); 
  digitalWrite(SM, HIGH);  // Pull High Restance
  Serial.begin(9600);
 }

void loop() 
{
          
   
  if  (!(digitalRead(SM))) 
    {
          
   
     COUNT = 0;  
     Serial.println("STOP COUNT = 0");
     delay (2000);
    }
     Serial.println(COUNT);  
}

//------------中断函数--------------------
void RoteStateChanged() //当 CLK  下降沿信号 读 DAT
{
          
   
 if  (digitalRead(DAT)) // When DAT = HIGH IS FORWARD
   {
          
   
    COUNT++;
   }
 else                   // When DAT = LOW IS BackRote
   {
          
   
    COUNT--;
   }
}

感觉没啥大用。

经验分享 程序员 微信小程序 职场和发展