this post was submitted on 23 Oct 2023
60 points (100.0% liked)

ErgoMechKeyboards

5829 readers
1 users here now

Ergonomic, split and other weird keyboards

Rules

Keep it ergo

Posts must be of/about keyboards that have a clear delineation between the left and right halves of the keyboard, column stagger, or both. This includes one-handed (one half doesn't exist, what clearer delineation is that!?)

i.e. no regular non-split¹ row-stagger and no non-split¹ ortholinear²

¹ split meaning a separation of the halves, whether fixed in place or entirely separate, both are fine.
² ortholinear meaning keys layed out in a grid

No Spam

No excessive posting/"shilling" for commercial purposes. Vendors are permitted to promote their products/services but keep it to a minimum and use the [vendor] flair. Posts that appear to be marketing without being transparent about it will be removed.

No Buy/Sell/Trade

This subreddit is not a marketplace, please post on r/mechmarket or other relevant marketplace.

Some useful links

founded 1 year ago
MODERATORS
 

Did my very first custom keyboard. Thank you @Tompi@discuss.tchncs.de for the amazing project. Question for folks familiar with QMK, when I used encoder (rotate it) it switches to the default(0) layer even if I keep holding the layer switch key. Any way around it? Here is the code if anyone is curious.

you are viewing a single comment's thread
view the rest of the comments
[–] nebula@lemmy.ca 2 points 1 year ago (1 children)

The function of the encoder is custom code, you need to Edit the encoder.c file to tweak it.

yeap, found it but the issue is that when encoder is rotated, it switches back to default layer. So, the code to use different things in different layers doesnt work. This is the code I have:

void turned(bool clockwise) {
    if (IS_LAYER_ON(0)) {
        tap_code16(clockwise ? LCTL(KC_PGDN) : LCTL(KC_PGUP));
    } 
    else if (IS_LAYER_ON(1)) {
        tap_code(clockwise ? KC_VOLU : KC_VOLD);
    } 
    else if (IS_LAYER_ON(2)) {
        tap_code16(clockwise ? LALT(KC_TAB) : LALT(LSFT(KC_TAB)));
    } 
    else if (IS_LAYER_ON(5)) {
        tap_code(clockwise ? KC_MS_WH_DOWN : KC_MS_WH_UP);
    }
    // else {
    //     tap_code16(clockwise ? LGUI(KC_Y) : LGUI(KC_Z));
    // }
}

P.s. You know you can tweak the led? Turn it off/change color and brightness, all using the qmk rgb keys. (Just wondered if the thing on top is to dim the light:)

Haha...yeap thats exactly what it was for, #define RGBLIGHT_LIMIT_VAL 2 helped me solve it.

[–] nebula@lemmy.ca 2 points 1 year ago

Digging some more, I found out that this happens only on the side that has encoder. Holding the layer keys that are on the micro-controller side and rotation encoder yields expected results. So I'm guessing its something to do with the matrix fix. My C isn't that sharp so I'll try to dig through and see what I can find.