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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5283|回复: 10

Arduino旋转编码器

[复制链接]
发表于 2020-1-28 17:45 | 显示全部楼层 |阅读模式
一个简单顺滑的Arduino旋转编码器
代码如下
[mw_shl_code=arduino,true]//中断1连接DT
//中断2连接SCK
//VCC - 5V
//GND - GND
bool Modes = true; //布尔储存触发状态
long count = 0;
unsigned long timers = 0; //无符号长整形储存触发时间并用于消抖
void setup()
{
  Serial.begin(115200);                //串口初始化
  attachInterrupt(1, A_inter, RISING); //开启中断 中断IO1 触发方式:上升沿 回调函数:A_inter
  attachInterrupt(0, B_inter, RISING); //开启中断 中断IO0 触发方式:上升沿 回调函数:B_inter
}
void loop()
{
}
void A_inter() //中断函数A
{
  if (!Modes && millis() - timers >= 20) //消抖并判断哪个先触发 A|B
  {
    count++;               //数值自增
    Serial.println(count); //串口打印
  }
  Modes = true;      //更改触发标志
  timers = millis(); //记录触发时间
}
void B_inter() //中断函数B
{
  if (Modes && millis() - timers >= 20) //消抖并判断哪个先触发 A|B
  {
    count--;               //数值自减
    Serial.println(count); //串口打印
  }
  Modes = false;     //更改触发标志
  timers = millis(); //记录触发时间
}[/mw_shl_code]注释很全 基本上依靠AB不同触发时间来判断
我自己使用很顺滑,只是超低速时第一次操作会往数值会反向增长 问题不大
后续若有什么不足请反馈给我
发表于 2020-1-29 23:32 | 显示全部楼层
用的是KY-040旋转编码器模块,20脉冲/圈

360截图20200129232233550.png 用您的代码转一圈,速度中等,尽量均匀。

360截图20200129230755638.png

这是参考:解决旋转编码抖动的方案 - Arduino - 极客工坊 - Powered by Discuz!  https://www.geek-workshop.com/thread-28165-1-1.html,写的代码。
同样1 圈,速度也是不定的,有的快速,有的慢慢的一格。
发表于 2020-1-28 18:03 | 显示全部楼层
本帖最后由 47okey 于 2020-1-28 18:05 编辑

谢谢分享,这么简单?有空试试
发表于 2020-1-28 19:50 | 显示全部楼层
正好最近在研究平衡车,用到了编码器测速,学习一下感谢分享
发表于 2020-1-29 16:10 | 显示全部楼层
不好用,数字 还是乱跑。特别是超慢速,就是转一格时,乱。
 楼主| 发表于 2020-1-29 17:35 | 显示全部楼层
本帖最后由 XlinliY.Zhang 于 2020-1-29 17:46 编辑
47okey 发表于 2020-1-29 16:10
不好用,数字 还是乱跑。特别是超慢速,就是转一格时,乱。

旋转编码器最少要转一格出才能有响应,你刻意卡一格压根没有程序能正常工作
 楼主| 发表于 2020-1-29 17:36 | 显示全部楼层
jeeffffff 发表于 2020-1-28 19:50
正好最近在研究平衡车,用到了编码器测速,学习一下感谢分享

测试是用单中断测的,不是用这种的
发表于 2020-1-29 22:41 | 显示全部楼层
XlinliY.Zhang 发表于 2020-1-29 17:35
旋转编码器最少要转一格出才能有响应,你刻意卡一格压根没有程序能正常工作 ...

刻意卡一格是什么样的,没明白。我是是转一格,转几格有时也乱的。
发表于 2020-1-29 22:42 | 显示全部楼层
比如做菜单,上或下一条,也只能转一格吧
 楼主| 发表于 2020-1-29 22:50 | 显示全部楼层
47okey 发表于 2020-1-29 22:42
比如做菜单,上或下一条,也只能转一格吧

转一格多点旋转编码器才会有响应,而不是你一次只能转2个数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 11:52 , Processed in 0.101285 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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