|
几年前在此发过类似的文章,见<https://www.stmcu.org.cn/module/forum/thread-614394-1-1.html>。 但还觉得不够简单,今天发一个更简单的,除去设置、打印、指示灯、延迟语句后,只用了两行指令(见//***标记)。% K/ R8 @, j( b6 y4 [8 l& Y5 } 代码如下:& F1 K; M( J! I, E3 ]+ a$ m 4 B0 P3 R* W& f5 t" r$ a7 R //test 旋转编码器 STM32F103 20210106.ino long keyN; void setup() {3 m/ ^. b6 d2 e4 U2 G5 Y6 P$ g: O pinMode (PA13, INPUT_PULLUP); pinMode (PA14, INPUT_PULLUP);# c/ M- V7 J/ M6 d0 E# V pinMode (PC13, OUTPUT); Serial.begin (115200); }+ s% M/ A* o8 A: T* x& k5 l9 k void loop() { if ( digitalRead( PA13 ) & digitalRead( PA14 )){ // *** digitalWrite( PC13, !digitalRead( PC13 ) ); // 指示灯 Serial.println( keyN ); // 打印 delay(2); // 延迟 keyN = keyN + !digitalRead(PA13) - !digitalRead(PA14); //***5 M. V4 h6 U4 M, X }6 R6 q5 i. A5 z# u } 注:" A$ e6 }0 G, O0 @' c0 F: T 1。延迟时间可根据具体需求自定义大小。* E s$ W% y' _3 z! m2 C6 J3 Y3 s 2。GPIO可按需任选,这里偷懒用了SWD引脚,最好改用其他脚。( T) q1 K9 }3 v' k \ 3。好像不能再精简到一行指令就能完成了,因为有时序关系。 4。望各位不吝指教。 / b" N; h+ `% i+ c |
微信公众号
手机版
keyN就是脉冲数值2 J3 W8 q+ J8 {" F* |& F
!digitalRead(PA13) 和 !digitalRead(PA14)的先后就是方向,它们同时只能有一个在变化。' k1 C' d/ d% V/ u
另外:旋转编码器有两种& y2 V" o8 z, I. g7 O- e, x& o
1.触点是长开型的,上面的程序可用。- S5 Q& M1 K$ B: s' B& H
2.市场上买来的简易旋转编码器模块,往往是长闭型的。上面加的两个103上拉电阻,请自行去掉。
并需将上面的程序中加“//***”号的改为
if ( !digitalRead( PA13 ) & !digitalRead( PA14 )){ // ***
keyN = keyN + digitalRead(PA13) - digitalRead(PA14); //***: x' j y) _7 m" |, K' @" c% T9 c% n
即可。
2.投文的目的是希望与大家共同改进、提高。本文今已投放到CSDN上,几小时便有600多人查看。希望各位大虾关心、指正。