はじめに
自作キーボードおもしろそうだなと思い「ここからはじめる自作キーボード」を買ったんですが、はや1年経ってしまっていたので、最近つくりはじめました。
付属の本を見ながら進めていたところ、「第2章 環境構築」の「試しにファームウェアを書き込んでみましょう」のところで楽しくなってしまい、脱線してLチカをしてみました。
この記事では環境構築からLチカできたところまでを記事にします。
環境構築
- 環境
- Arch Linux(EndeavourOS)
- qmk-cli 1.1.2
付属の本では qmk_firmware リポジトリをクローンしてきてましたが、QMKの公式ドキュメントを眺めたりして、 qmk_cli を使って進めることにしました。
$ sudo pacman --needed --noconfirm -S git python-pip libffi
$ sudo pacman -S qmk
付属の本に記載されてる、
$ make hifumi:test
$ make hifumi:test:avrdude
はqmk_cliでは以下のようになります。
$ qmk compile --keyboard hifumi --keymap test
$ qmk flash --keyboard hifumi --keymap test
ファームウェアを書き込んだら、lsusb
してどんな表示になってるか確認しました。
$ lsusb --verbose
(snip)
Bus 001 Device 011: ID feed:3060 riconken hifumi
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
(snip)
うおおおーーー、アツいですね
Lチカもしてみたくなってやってみた
これだけじゃもの足りず、Lチカもやってみようと思い調べながらやってみました。(脱線しだした)
とりあえず、新しくキーマップを用意して、test用のキーマップファイルをコピーしました。
$ qmk new-keymap --keyboard hifumi --keymap led-flash-test
$ cp ~/qmk_firmware/keyboards/hifumi/keymaps/test/keymap.c ~/qmk_firmware/keyboards/hifumi/keymaps/led-flash-test/keymap.c
そして、Lチカをするために調べた感じ、
-
RX
,TX
のLEDを制御できると良さそう-
B0
,D5
のポート(?)をLow/Highにするとオンオフできる
-
-
matrix_init_user
,matrix_scan_user
関数でLow/Highを書き込めると良さそう- キーが押されているかの状態確認をループしており、その確認のタイミングに任意のコードを書ける
ができると良さそうでした。
それをもとに実装したのが以下です。
// (snip)
#define RX_LED B0
#define TX_LED D5
static void control_led(int pin, bool turn_on) {
setPinOutput(pin);
if (turn_on) {
writePinLow(pin);
} else {
writePinHigh(pin);
}
}
void matrix_init_user(void) {
control_led(RX_LED, false);
control_led(TX_LED, false);
}
void matrix_scan_user(void) {
static int counter = 0;
static bool turn_on = false;
counter++;
if (counter > 5000) {
counter = 0;
if (turn_on) {
control_led(RX_LED, false);
control_led(TX_LED, false);
turn_on = false;
} else {
control_led(RX_LED, true);
control_led(TX_LED, true);
turn_on = true;
}
}
}
これでファームウェアを書き込むと...
Lチカできました!!
さいごに
はんだ付けをしたのが中学生のころが最後で不安しかないですが、がんばります。