在一些比較高階或是特化的鍵盤中,有許多都有轉盤的功能,當然轉盤要做到好需要有良好的軟體支援,這樣就需要額外安裝驅動程式,但透過QMK的旋轉編碼器就可以實現大部分的功能,因此在這裡將教各位如何使用上旋轉編碼器。
旋轉編碼器通常會有三隻腳,一隻腳為共用接腳,另外兩隻則為A
以及B
接腳,轉動旋轉編碼器時量測電壓會出現下列的圖形:
這個圖片代表著順時針旋轉時,A
以及B
接腳的輸出狀態,可以藉此用來判斷正轉以及逆轉,如果是正轉的話A
接腳的相位超前B
接腳的相位90˚,而反轉時A
接腳的相位則落後B
接腳的相位90˚,因此可以用來判斷旋轉編碼器旋轉的方向。
在rules.mk
裡面加入這一行
ENCODER_ENABLE = yes
然後在config.h
裡面設定A
接腳以及B
接腳對應要連接MCU的腳位,共用接腳接地,如果轉的方向跟預期的相反,就將腳位對調即可
#define ENCODERS_PAD_A { B12 }
#define ENCODERS_PAD_B { B13 }
如果有兩個或是兩個以上的旋轉編碼器的話,可以這樣接,以下的encoder1a
之類的代表他們要接在MCU上的哪一隻腳,不是真的打encoder1a
之類的鬼東西
#define ENCODERS_PAD_A { encoder1a, encoder2a, encoder3a }
#define ENCODERS_PAD_B { encoder1b, encoder2b, encoder3b }
預設的解析度為4,若需要增加或是減少解析度時,再自行變更
#define ENCODER_RESOLUTION 4
接著在keymap.c
裡面設定正轉以及反轉要設定成什麼按鍵
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
tap_code(KC_UP);
} else {
tap_code(KC_DOWN);
}
}else if (index == 2) { /* Third encoder */
if (clockwise) {
tap_code(KC_AUDIO_VOL_UP);
} else {
tap_code(KC_AUDIO_VOL_DOWN);
}
上面就是三個旋轉編碼器的程式碼,一個是按下pgup
和pgdn
,第二個是按下方向鍵上以及方向鍵下,第三個則是音量旋鈕,總共三顆旋鈕了,夠逼格了吧!!