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

它和电位器差在哪
电位器输出的是模拟电压,角度有限位;旋转编码器输出的是数字脉冲,能转360度圈圈转,没有起点终点。它内部有两个开关A和B,转一圈产生20个咔哒档位,每个档位输出两路相位差90度的方波,靠判断哪一路先变态来识别方向。
这种"两路信号相差90度"的输出叫正交输出,是编码器判断方向的通用作法,后面算法都建立在它上面。
五根线怎么接
模块上五个脚:CLK接D2,DT接D3,SW接D4,电源正接5V,GND接地。D2和D3是Arduino的外部中断脚,编码器接在这两个脚上响应最快。

模块板上已经带了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打印机调参、复古游戏机菜单、合成器旋钮都用它。把正交输出和中断这套读法吃透,以后换任何编码器都是同一套逻辑。照着接、跑通再说,别一上来就贪复杂。







周末做个调亮度小夜灯试试,谢了
我才发现旋钮和电位器不一样,转起来手感舒服多了
之前轮询老丢步,换成中断好多了,这个坑跟我踩的一样
旋钮做菜单导航太顺了,CLK和DT用中断那一招学到了
做个调亮度小夜灯试试,谢谢教程