/* Arduino Rotary Encoder Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * 時間:2018/06/20 * 作者:黑修斯 (陳建仲) * 檔名:encoder_hu02 * 版本:v01 * 說明:旋轉編碼器模組加入中斷來計算,減少丟步(遺失訊號)。 */ #define outputA 2 //定義 outputA = 2 #define outputB 7 //定義 outputB = 7 int counter = 0; //定義 counter 為 int 類型變數,且初始值為0 int aState; //定義 aState 為 int 類型變數 int aLastState; //定義 aLastState 為 int 類型變數 //初始化設定↓↓↓ void setup() { pinMode (outputA,INPUT); //埠口模式設定:outputA 設為 輸入 pinMode (outputB,INPUT); //埠口模式設定:outputB 設為 輸入 attachInterrupt (0, test, CHANGE); //啟用中斷函式(中斷0,test函式,CHANGE模式) Serial.begin (9600); //Serial通訊鮑率設為9600 aLastState = digitalRead (outputA); //將初始outputA的讀取值 設給 aLastState } //主程式運作區↓↓↓ void loop() { Serial.print("Position: "); //透過serial印出字串 Position: Serial.println(counter); //透過serial印出 counter 值 } //test函式 void test(){ aState = digitalRead(outputA); //將outputA的讀取值 設給 aState if (aState != aLastState){ //條件判斷,當aState 不等於 aLastState時發生 if (digitalRead(outputB) != aState) { //條件判斷,當outputB讀取值 不等於 aState時發生 counter ++; //計數器+1 } else { counter --; //計數器-1 } } aLastState = aState; //將aState 最後的值 設給 aLastState }