Grove-Encoder 編碼器 測試- 使用 LinkIt Smart 7688 Duo
****注意 LinkIt 7688 Duo 在 Arduino IDE 1.6.9 有問題 ,Arduino IDE 要用1.6.7*****
Grove-Encoder (編碼器)是增量式旋轉編碼器。增量型編碼器也稱作相對型編碼器,利用檢測脈衝的方式來計算轉速及位置,可輸出有關旋轉軸運動的資訊。
注意:這個Grove-Encoder (編碼器)模組沒按下的功能。
增量型編碼器有二個輸出,分別稱為A和B,二個輸出是正交輸出,相位差為90度。二個訊號有90度的相位差,在不同旋轉方向時,二個訊號的相序也有所不同,可以利用程式將二個訊號進行解碼.根據其相序不同,在有方波時使一計數器上數或是下數,此計數器的值即可對應轉軸的旋轉量。
Grove-Encoder
Seeed Studio 料號 : 151126041 包裝內容 : 編碼器模組 x 1 Grove 線材 x 1。
將 Grove 線材插入編碼器 。
Grove 線材另一頭插在 LinkIt Smart 7688 Duo 底座的 D4 , OLED 插在 I2C。
插入 USB 與電腦連線。
開啟 Arduino 輸入以下程式碼
//*******程式開始********
/* 此為用 I/O 捕捉編碼器,失誤率有點高,要降低錯誤率須使用中斷 */
#include <Wire.h>
#include <SeeedOLED.h>
int val;
int encoder0PinA = 4; //編碼器 A 接 Pin4
int encoder0PinB = 5; //編碼器 B 接 Pin5
int encoder0Pos = 0; //初始值為0
int encoder0PinALast = LOW;
int n = LOW;
void setup()
{
Wire.begin();
SeeedOled.init(); //初始化OLED
SeeedOled.clearDisplay(); //清除OLED
SeeedOled.setNormalDisplay(); //設定OLED為正常顯示
SeeedOled.setPageMode(); //設定OLED為頁模式
pinMode (encoder0PinA,INPUT); //設定編碼器 A 為輸入
pinMode (encoder0PinB,INPUT); //設定編碼器 B 為輸入
}
void loop() {
n = digitalRead(encoder0PinA); //開始捕捉編碼器 A 的變化
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
} else {
encoder0Pos++;
}
SeeedOled.setTextXY(0,0); //游標移至0,0
SeeedOled.putString(" "); //列出空白
SeeedOled.setTextXY(0,0); //游標移至0,0
SeeedOled.putNumber(encoder0Pos); //輸出編器的值
}
encoder0PinALast = n;
}
//******程式結束*******
確認 工具 > 版子 序列埠 是否正確。
按 "上傳 "。
詢問存檔 "Encoder" 存檔。
程式上傳中。
程式上傳完成。
上傳完成後 旋轉 Encoder 順時針轉數字會增加,逆時針轉數字會減少。
參考資料 : 聯發科創意實驗室 http://home.labs.mediatek.com/?lang=zh-hans
Arduino LLC https://www.arduino.cc/
有沒有linkit one板子能使用的程式
回覆刪除