极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11935|回复: 4

求助个代码关于旋转编码器计算转速与转角的

[复制链接]
发表于 2014-5-18 21:24:56 | 显示全部楼层 |阅读模式

#define ENCODER_A_PIN 2
#define ENCODER_B_PIN 3
#define SWITCH_PIN    4
long position;

void setup(){
  //setup our pins 初始化我们的需要的引脚
  pinMode(ENCODER_A_PIN, INPUT);
  pinMode(ENCODER_B_PIN, INPUT);
  pinMode(SWITCH_PIN, INPUT);

  attachInterrupt(0, read_quadrature, CHANGE);

  //setup our serial 初始化Arduino串口
  Serial.begin(9600);
}

void loop(){
   if (digitalRead(SWITCH_PIN) == LOW){
     delay(10);
     if (digitalRead(SWITCH_PIN) == LOW){
       Serial.println("Switch Pressed");
     }
   }
   Serial.print("Position: ");
   Serial.println(position, DEC);
   delay(1000);
}

void read_quadrature(){  
  // found a low-to-high on channel A ENA脚下降沿中断触发
  if (digitalRead(ENCODER_A_PIN) == LOW){   
    // check channel B to see which way 查询ENB的电平以确认是顺时针还是逆时针旋转
    if (digitalRead(ENCODER_B_PIN) == LOW)
      position++;
  }
  // found a high-to-low on channel A ENA脚上升沿中断触发
  else{
    // check channel B to see which way 查询ENB的电平以确认是顺时针还是逆时针旋转
    if (digitalRead(ENCODER_B_PIN) == LOW)
      position--;
  }
}


网上关于旋转编码器的材料太少了,这是找到的别人写的代码,可惜不会改啊,串口能读出旋转过的位置数,不知道在哪填进角度转化啊,求个好人给改下,谢谢了
回复

使用道具 举报

发表于 2014-5-18 23:45:01 来自手机 | 显示全部楼层
角度是更具编码器一整圈的脉冲数换算出来的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 11:48:19 | 显示全部楼层
frame66 发表于 2014-5-18 23:45
角度是更具编码器一整圈的脉冲数换算出来的。

嗯,编码器一圈是20个脉冲,不知道在哪改啊
回复 支持 反对

使用道具 举报

发表于 2014-5-19 17:36:05 | 显示全部楼层
20个脉冲是一圈360度,那么1个脉冲就是18度,用position*18就可以转换成度数了。
回复 支持 反对

使用道具 举报

发表于 2016-4-13 21:30:53 | 显示全部楼层
问一下。你用的是哪种旋转编码器啊。。???
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 11:43 , Processed in 0.046515 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表