广告

使用Arduino 來偵測Rotary Encoder

2019-1-7 18:53 285 1 分类: MCU/ 嵌入式

# Arduino

# Rotary Encoder

# Interrutp

# Ext interrupt

# Arduino for Encoder

# Arduino for Rotary

# 兩個剪貼搞定 Rotary Encoder

使用Arduino來偵測Rotary Encoder 在網路的範例很多,但是他們似乎是不太適合我用,他們的方法,當我轉動Encoder會加二,或者會誤動作,讓人誤以爲Encoder不良,或者是漏格現象

針對這個問題我寫了一個即簡單有好用的程式碼在此公開給大家參考,如需要再改建,或者有錯誤,請讓我知道。

這是我們可以買得到的Rotary Encoder 


這個是Rotary Encoder的波形解析圖我的程式是來自於這張圖,在網路衆多圖片中我覺得這一張圖片畫的最好。


Encoder 和Arduino的接法【只是建議】,實際上的應用還是要以你的需要而定。

在硬體方面我的PinA是接在Arduino的外部中斷腳,PinB可以接在一般的Digital pin即可。

在Arduino的 Setup{


pinMode(outputB,INPUT); //設定19爲input

digitalWrite(outputB,HIGH); // 內部pull high 電阻開啓

attachInterrupt(digitalPinToInterrupt(outputA),ENCODER_SUB,FALLING);  

}

 宣告外部中斷。

外部中短的語法www.arduino.cc網站中建議使用

attachInterrupt(digitalPinToInterrupt(outputA),ENCODER_SUB,FALLING);

digitalPinToInterrupt(outputA)這個寫法在我這次的MEGA2560才有辦法啓動外部中斷

這一點要特別注意。


中斷的副程式內容如下:


void ENCODER_SUB(void)

{


if ((f_cw_start ==0)||(f_ccw_start==0))

{

if(digitalRead(outputB)==1)

{

f_cw_start = 1;

attachInterrupt(digitalPinToInterrupt(outputA), ENCODER_SUB,RISING);

} else{

attachInterrupt(digitalPinToInterrupt(outputA), ENCODER_SUB,RISING);

f_ccw_start = 1;

}

}


if ((f_cw_start ==1)||(f_ccw_start==1))

{

if(digitalRead(outputB)==0)

{

attachInterrupt(digitalPinToInterrupt(outputA), ENCODER_SUB,FALLING);

encoder_counter++;

f_cw_start = 0;

}else{

attachInterrupt(digitalPinToInterrupt(outputA), ENCODER_SUB,FALLING);

encoder_counter--;

f_ccw_start = 0;

}


}


}

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
阿衛 2019-01-07 19:01
五分鐘搞定Arduino I2C LCD Display
對於不懂的Firmware的人要進入Firmware的世界真的很難,現在有一種工具很快就讓人上手使用,我今天要介紹的就是Arduino UNO + I2C LCD模組。什麼是Arduino?圖一 &n...
阿衛 2019-01-07 18:59
五分鐘搞定Arduino控制SPI
什麼是SPI?https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_BusSPI 是一種四線制串列匯流排介面,為主/從結構,四條導線分別為...
阿衛 2019-01-07 18:55
如何使用Arduino 替代 NI USB-6501 DAQ
#Arduino#DAQ#Labview#Arduino UNO#NI USB-6501如何使用Arduino 替代 NI USB-6501 DAQ所需的硬體以及軟體如下:Ardu...
阿衛 2019-01-07 18:50
使用Arduino 尋找裝置的I2C 地址
#Arduino #Arduino UNO #Arduino MEGA2560 #Arduino DUE #I2C #IIC #I2C LCD #1602 LCD #LCD這裏我先用一張圖來解釋Ard...
我要评论
0
1
广告