6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

「ここからはじめる自作キーボード」で脱線してLチカをしてみた

Posted at

はじめに

自作キーボードおもしろそうだなと思い「ここからはじめる自作キーボード」を買ったんですが、はや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を書き込めると良さそう
    • キーが押されているかの状態確認をループしており、その確認のタイミングに任意のコードを書ける

ができると良さそうでした。
それをもとに実装したのが以下です。

~/qmk_firmware/keyboards/hifumi/keymaps/led-flash-test/keymap.c
// (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チカできました!!

さいごに

はんだ付けをしたのが中学生のころが最後で不安しかないですが、がんばります。

Refs

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?