https://www.stmcu.org.cn/module/forum/thread-628556-1-2.html
幾年前在此發過類似的文章,見<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。望各位不吝指教。
uj5u.com熱心網友回復:
有看帖者問:看不懂,怎么識別方向和脈沖數?解釋:
keyN = keyN + !digitalRead(PA13) - !digitalRead(PA14); //***
keyN就是脈沖數值
!digitalRead(PA13) 和 !digitalRead(PA14)的先后就是方向,它們同時只能有一個在變化。
另外:旋轉編碼器有兩種
1.觸點是常開型的,上面的程式可用。
2.市場上買來的簡易旋轉編碼器模塊,有可能是常閉型的。
請先將模塊上的兩個103上拉電阻去掉,并需將上面程式中加“//***”號的改為
if ( !digitalRead( PA13 ) & !digitalRead( PA14 )){ // ***
keyN = keyN + digitalRead(PA13) - digitalRead(PA14); //***
即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246676.html
標籤:硬件使用
上一篇:求大佬幫忙解釋下這是什么原因
