
几年前在此发过类似的文章,见<https://www.stmcu.org.cn/module/forum/thread-614394-1-1.html>。 但还觉得不够简单,今天发一个更简单的,除去设置、打印、指示灯、延迟语句后,只用了两行指令(见//***标记)。 代码如下: //test 旋转编码器 STM32F103 20210106.ino long keyN; void setup() { pinMode (PA13, INPUT_PULLUP); pinMode (PA14, INPUT_PULLUP); pinMode (PC13, OUTPUT); Serial.begin (115200); } void loop() { if ( digitalRead( PA13 ) & digitalRead( PA14 )){ // *** digitalWrite( PC13, !digitalRead( PC13 ) ); // 指示灯 Serial.println( keyN ); // 打印 delay(2); // 延迟 keyN = keyN + !digitalRead(PA13) - !digitalRead(PA14); //*** } } 注: 1。延迟时间可根据具体需求自定义大小。 2。GPIO可按需任选,这里偷懒用了SWD引脚,最好改用其他脚。 3。好像不能再精简到一行指令就能完成了,因为有时序关系。 4。望各位不吝指教。 |
keyN就是脉冲数值
!digitalRead(PA13) 和 !digitalRead(PA14)的先后就是方向,它们同时只能有一个在变化。
另外:旋转编码器有两种
1.触点是长开型的,上面的程序可用。
2.市场上买来的简易旋转编码器模块,往往是长闭型的。上面加的两个103上拉电阻,请自行去掉。
并需将上面的程序中加“//***”号的改为
if ( !digitalRead( PA13 ) & !digitalRead( PA14 )){ // ***
keyN = keyN + digitalRead(PA13) - digitalRead(PA14); //***
即可。
2.投文的目的是希望与大家共同改进、提高。本文今已投放到CSDN上,几小时便有600多人查看。希望各位大虾关心、指正。