KY-040旋转编码器接Arduino:接线、方向判断与中断计数

2026-10-20 20:30:40 62阅读

做菜单、调音量、设参数,最好用的是一个不吃位置的旋钮,而不是转半圈就到头的电位器。KY-040旋转编码器正好是这种——它能无限顺时针逆时针转,还能告诉你转了多少、朝哪个方向转,轴上还自带一个按键。这篇把接线和读数的路子给你捋清楚。

cover ky040

它和电位器差在哪

电位器输出的是模拟电压,角度有限位;旋转编码器输出的是数字脉冲,能转360度圈圈转,没有起点终点。它内部有两个开关A和B,转一圈产生20个咔哒档位,每个档位输出两路相位差90度的方波,靠判断哪一路先变态来识别方向。

这种"两路信号相差90度"的输出叫正交输出,是编码器判断方向的通用作法,后面算法都建立在它上面。

五根线怎么接

模块上五个脚:CLK接D2,DT接D3,SW接D4,电源正接5V,GND接地。D2和D3是Arduino的外部中断脚,编码器接在这两个脚上响应最快。

body ky040 wiring

模块板上已经带了10K上拉电阻,所以CLK和DT不用你再外接上拉。SW按键接地那一路,代码里用INPUT_PULLUP打开内部上拉就能用了,按下时读到低电平。

读懂方向

核心思路是:每检测到A信号变一次,就去读一下B信号。如果B的电平和A此刻不一样,说明A先变化,旋钮在顺时针转,计数加一;如果B和A一样,说明B先变化,是逆时针,计数减一。

用中断的好处是,哪怕是正忙着刷新屏幕或者干别的活,旋钮一转就能立刻被捕捉到,不容易丢步。手动轮询在快速旋转时会漏记,这是新手最常见的坑。

一个实用小项目

把CLK、DT接在中断脚上,SW按键当开关,再接一个带PWM的LED调到D9,你就能做一个"旋钮调亮度、按下开灯"的小夜灯。顺时针旋亮度递增,逆时针递减,按下切换开关状态。这套交互在很多成品电器里就是这么做的。

接线短一点,别超过20厘米,太长容易引入噪声导致误计数。想更稳可以再加100nF的电容做去抖,但一般实验不用这么讲究。

小结

KY-040是个万能的小输入件,3D打印机调参、复古游戏机菜单、合成器旋钮都用它。把正交输出和中断这套读法吃透,以后换任何编码器都是同一套逻辑。照着接、跑通再说,别一上来就贪复杂。


作者:隔壁老王的教程
链接:https://www.aiddithome.com/p/7ee9cbaa5ad63.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
5条评论
只看不说话
1楼 · 2026-10-20 20:34:01

周末做个调亮度小夜灯试试,谢了

探头看一眼
2楼 · 2026-10-20 20:34:00

我才发现旋钮和电位器不一样,转起来手感舒服多了

胶佬憨憨
3楼 · 2026-10-20 20:33:59

之前轮询老丢步,换成中断好多了,这个坑跟我踩的一样

线比代码多
4楼 · 2026-10-20 20:33:57

旋钮做菜单导航太顺了,CLK和DT用中断那一招学到了

阿伟不emo
5楼 · 2026-10-20 20:31:52

做个调亮度小夜灯试试,谢谢教程