You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2.3 KiB

DIP スイッチ

DIP スイッチは、以下を rules.mk に追加することでサポートされます:

DIP_SWITCH_ENABLE = yes

さらに、以下を config.h に追加します:

#define DIP_SWITCH_PINS { B14, A15, A10, B9 }

コールバック

コールバック関数を <keyboard>.c に記述することができます:

void dip_switch_update_kb(uint8_t index, bool active) { 
    dip_switch_update_user(index, active); 
}

あるいは keymap.c に記述することもできます:

void dip_switch_update_user(uint8_t index, bool active) { 
    switch (index) {
        case 0:
            if(active) { audio_on(); } else { audio_off(); }
            break;
        case 1:
            if(active) { clicky_on(); } else { clicky_off(); }
            break;
        case 2:
            if(active) { music_on(); } else { music_off(); }
            break;
        case 3:
            if (active) {
                #ifdef AUDIO_ENABLE
                    PLAY_SONG(plover_song);
                #endif
                layer_on(_PLOVER);
            } else {
                #ifdef AUDIO_ENABLE
                    PLAY_SONG(plover_gb_song);
                #endif
                layer_off(_PLOVER);
            }
            break;
    }
}

更に、より複雑な処理ができるビットマスク関数をサポートします。

void dip_switch_update_mask_kb(uint32_t state) { 
    dip_switch_update_mask_user(state); 
}

あるいは keymap.c に記述することもできます:

void dip_switch_update_mask_user(uint32_t state) { 
    if (state & (1UL<<0) && state & (1UL<<1)) {
        layer_on(_ADJUST); // C on esc
    } else {
        layer_off(_ADJUST);
    }
    if (state & (1UL<<0)) {
        layer_on(_TEST_A); // A on ESC
    } else {
        layer_off(_TEST_A);
    }
    if (state & (1UL<<1)) {
        layer_on(_TEST_B); // B on esc
    } else {
        layer_off(_TEST_B);
    }
}

ハードウェア

DIP スイッチの片側は MCU のピンへ直接配線し、もう一方の側はグラウンドに配線する必要があります。機能的に同じであるため、どちら側がどちらに接続されているかは問題にはならないはずです。