[鍵盤] GH60 macro 教學 by Mac

看板Key_Mou_Pad (鍵盤滑鼠)作者 (kira10!)時間10年前 (2016/01/14 22:43), 10年前編輯推噓15(1500)
留言15則, 15人參與, 最新討論串1/1
在打這篇文章之前,首先要先看過以下文章,確保該裝的東西都裝好後再開始出發 https://www.ptt.cc/bbs/Key_Mou_Pad/M.1430970988.A.4D9.html 好的,這次我為各位版友帶來了GH60的巨集做法 手邊沒有蔡新或是BLE60等擁有專有的編輯器,怎麼辦才能寫巨集呢? TKG跟KLE等工具也沒辦法支援呀QQ 沒錯,這很困難,同時,也十分的簡單 首先,先到KLE編輯想要的layout 注意,記得把想要做成巨集鍵的鍵設為fn 我設定了三個macro分別為fn0、fn1、fn2 接下來把RAW data複製到TKG上 http://imgur.com/bqYQzLL
fn的選項都選Other>Built-in macro 00 像我有三個巨集鍵,如上圖所示 好的接下來請選Download .c file 把keymap下載下來 接下來用寫程式的東西打開來(無論要用vim xcode sublime text都可以) 我用sublime text做示範 http://imgur.com/REVBBm4
可以看到程式碼長這樣 比對一下已經有巨集功能的keymap http://imgur.com/WLYD1m2
http://imgur.com/LVfToHj
簡單來看一下可以發現多了什麼? 第一個 enum macro_id { HELLO, VOLUP, ALT_TAB, }; 這裡是定義你的巨集叫什麼名字 也就是 [0] = ACTION_MACRO(), [1] = ACTION_MACRO(), [2] = ACTION_MACRO(), 的小掛號裡面要放的 [0] = ACTION_MACRO(HELLO), [1] = ACTION_MACRO(VOLUP), [2] = ACTION_MACRO(ALT_TAB), 以上我們把巨集的名字寫好了 接下來我們要開始讓他知道巨集該如何動作 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case HELLO: return (record->event.pressed ? MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) : MACRO_NONE ); case VOLUP: return (record->event.pressed ? MACRO( D(VOLU), U(VOLU), END ) : MACRO_NONE ); case ALT_TAB: return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } return MACRO_NONE; } 上面有一個const macro_t *action_get_macro的小程式 裡面有一個switch看不懂沒關係,照打就好了 看一下這裡 MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) 要輸入HELLO需要按H->E->L->L->O 然後結束END 各位會問說:奇怪,裡面的I() T() W() U() D()是什麼意思? 他們分別指的是 I() change interval of stroke. 「改變macro內每個指令的時間間隔」 D() press key  「壓下按鍵」 U() release key 「放開按鍵」 T() type key(press and release) 「打字(壓下及放開)」 W() wait 「等待時間」 END end mark 「結束符號」 瞭解之後就把上述的程式加入keymap.c後就可以完成巨集了 以下小範例 enum macro_id { PTT, }; #ifdef KEYMAP_SECTION_ENABLE const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = { #else const uint16_t fn_actions[] PROGMEM = { #endif [0] = ACTION_MACRO(PTT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case PTT: return (record->event.pressed ? MACRO( I(30), T(P), T(T), T(T), END ) : MACRO_NONE); } return MACRO_NONE; } 加入原本的keymap後再修改一下 [0] = ACTION_MACRO(), 就可以做成每30ms為間隔輸入的PTT 如果在“MACRO( I(30), T(P), T(T), T(T), END ) :” 的T(T), T(T)放入一個W(100)會如何呢? 讓各位來玩玩看吧! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.238.108.38 ※ 文章網址: https://www.ptt.cc/bbs/Key_Mou_Pad/M.1452782619.A.1DB.html

01/14 22:45, , 1F
K壕必推
01/14 22:45, 1F
哈哈!我希望能幫助到想用macro的人 對了,如果是要玩AMJ也是可以喔! 把這個AMJ60的包下載下來 https://github.com/AMJKeyboard/AMJ60 在下載https://github.com/kairyu/tmk_core_custom 取代AMJ60內的tmk_core_custom/ 然後修改一下AMJ60/src裡面的config.h 在 #ifndef CONFIG_H #define CONFIG_H 下方加入#define GH60_REV_CHN 之後再照著make KEYMAP=XXX(你的keymap名字) dfu 就可以了 ※ 編輯: kira3628800 (36.238.108.38), 01/14/2016 22:51:22

01/14 22:48, , 2F
屌屌屌
01/14 22:48, 2F

01/14 22:49, , 3F
讚! 推一個
01/14 22:49, 3F

01/14 23:08, , 4F
太狂了吧
01/14 23:08, 4F

01/14 23:52, , 5F
太神啦!!!
01/14 23:52, 5F

01/15 00:21, , 6F
看不懂但太強了只好推XD
01/15 00:21, 6F

01/15 00:28, , 7F
推推!!
01/15 00:28, 7F

01/15 00:43, , 8F
推教學文
01/15 00:43, 8F

01/15 00:48, , 9F
優質好文
01/15 00:48, 9F

01/15 01:21, , 10F
推,普洛
01/15 01:21, 10F

01/15 01:56, , 11F
推技術文章
01/15 01:56, 11F

01/15 02:08, , 12F
推,也來研究研究
01/15 02:08, 12F

01/15 02:18, , 13F
看到k壕先推~
01/15 02:18, 13F

01/15 08:40, , 14F
先教會printf("Hello world!");再教這個啦~~
01/15 08:40, 14F

01/15 09:52, , 15F
跪了 壕猛
01/15 09:52, 15F
文章代碼(AID): #1MbxGR7R (Key_Mou_Pad)
文章代碼(AID): #1MbxGR7R (Key_Mou_Pad)