Arduino教程——旋转编码器-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: 三水

Arduino教程——旋转编码器

  [复制链接]
发表于 2013-10-14 22:58 | 显示全部楼层
attachInterrupt(0, read_quadrature, CHANGE); 什么意思呢
发表于 2013-11-6 14:51 | 显示全部楼层
编码器输出频率高时完全失效
发表于 2013-11-6 15:44 | 显示全部楼层
/* LEE 抄袭并小改的版本,原版版权:三水
  RotaryEncoder

  Read a rotary encoder with interrupts
  Read the press action with digitalread
  Encoder&Switch hooked up with common to +5V
  ENCODER_A_PIN to pin 2
  ENCODER_A_PIN to pin 3
  SWITCH_PIN to pin 4  

  Published by ArduinoCN&OpenJumper.For surport
  materials and a full range of system boards &
  periphrals please visit :
              http://www.arduino.cn
            http://www.openjumper.com
  created & modified 15 Dec 2012
  by i3water
*/

#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(){

   Serial.print("Position: ");
   Serial.println(position, DEC);
//   delay(1000);
}

void read_quadrature(){  
  // found a low-to-high on channel A ENA脚下降沿中断触发
  if (bitRead(PIND,2) == LOW){   
    // check channel B to see which way 查询ENB的电平以确认是顺时针还是逆时针旋转
    if (bitRead(PIND,3) == LOW)
      position++;
  }
  // found a high-to-low on channel A ENA脚上升沿中断触发
  else{
    // check channel B to see which way 查询ENB的电平以确认是顺时针还是逆时针旋转
    if (bitRead(PIND,3) == LOW)
      position--;
  }
}
发表于 2013-11-6 19:40 | 显示全部楼层
Thank you very much
发表于 2014-2-6 22:55 来自手机 | 显示全部楼层
mark,留个脚印
发表于 2014-4-4 09:00 | 显示全部楼层
本帖最后由 ceo 于 2014-4-4 09:02 编辑



楼主,我按照你的帖子配置编码器,运行的结果:不管我怎么顺时针逆时针旋转,只是刚开始有两个值有减小的,后面输出值清一色是增长的。什么回事啊?
发表于 2014-4-4 09:03 | 显示全部楼层
Lee 发表于 2013-11-6 15:44
/* LEE 抄袭并小改的版本,原版版权:三水
  RotaryEncoder

我上面提到的问题,是不是就是delay(1000)这个语句造成的啊?
发表于 2014-4-11 20:46 | 显示全部楼层
ceo 发表于 2014-4-4 09:03
我上面提到的问题,是不是就是delay(1000)这个语句造成的啊?

不是,这是中断做的。详情你可以看任何一本单片机书的中断章节
发表于 2014-5-16 23:04 | 显示全部楼层
Lee 发表于 2013-11-6 15:44
/* LEE 抄袭并小改的版本,原版版权:三水
  RotaryEncoder

喜欢,通俗易懂
发表于 2014-6-10 22:46 | 显示全部楼层
Lee 发表于 2014-4-11 20:46
不是,这是中断做的。详情你可以看任何一本单片机书的中断章节

试验多次,还是觉得楼主的代码有问题。

极客工坊也有旋转编码器的代码。我试验过了,他的代码没问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 03:17 , Processed in 0.107186 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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