qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

readme.md (5676B)


      1 # Terrazzo
      2 
      3 ![Terrazzo](https://i.imgur.com/W91ixck.jpg)
      4 
      5 Terrazzo is a 40% pro micro keyboard kit with a fun, hot-swapable LED module. It is offered in both staggered and ortholinear variations, each with multiple layout options. A left hand macro column has 4 positions for switches or rotary encoders. 
      6 
      7 Extended layout options and multiple encoder support will require use of an Elite-C controller. Key switch support is MX soldered only.
      8 
      9 * Keyboard Maintainer: MsMustard, [Anne Demey](https://github.com/ademey) 
     10 * Hardware Supported: Terrazzo v1 & v2 PCB in staggered and ortholinear
     11 
     12 Make example for this keyboard (after setting up your build environment):
     13 
     14 - `make terrazzo:default` Split spacebar staggered layout
     15 - `make terrazzo:ortho` 2 x 2u spacebar ortho layout
     16 - `make terrazzo:ortho_mit` 2u spacebar ortho layout
     17 - `make terrazzo:ortho_all` All 1u ortho layout
     18 
     19 See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
     20 
     21 ## Parts List
     22 - 1 PCB (staggered or ortho)
     23 - 1 LED module ([red](https://www.digikey.com/product-detail/en/adafruit-industries-llc/3134/1528-1699-ND/6058480), [green](https://www.digikey.com/product-detail/en/adafruit-industries-llc/3136/1528-1701-ND/6058482), [yellow](https://www.digikey.com/short/zbttp5), [blue](https://www.digikey.com/product-detail/en/adafruit-industries-llc/3137/1528-1702-ND/6058483), or [white](https://www.digikey.com/product-detail/en/adafruit-industries-llc/3138/1528-1703-ND/6058484))
     24 - [1 Rotary encoder](https://www.digikey.com/short/zbttzn)
     25 - 1 Knurled knob ([black](https://www.digikey.com/short/zbttz4) or [silver](https://www.digikey.com/short/zbttz4))
     26 - [SMD diodes](https://www.digikey.com/short/zbttzr)
     27 - [Reset switch](https://www.digikey.com/short/zbttz1)
     28 - Mill-max female headers ([12](https://www.digikey.com/short/zbtt42) & [5](https://www.digikey.com/short/zbttmt) pins) and [through-hole diodes](https://www.digikey.com/short/zbttmj) to aid in socketing a pro micro
     29 - Mill-max [male](https://www.digikey.com/short/zbttm5) & [female](https://www.digikey.com/short/zbttm4) headers for LED module
     30 
     31 ## Custom Keycodes
     32 
     33 Terrazzo has several custom keycodes for LED control.
     34 
     35 | Key | Description |
     36 |-----|-------------|
     37 | `TZ_NXT` | Next Animation |
     38 | `TZ_PRV` | Previous Animation |
     39 | `TZ_OFF` | LED Off |
     40 
     41 ## LED Animations
     42 
     43 LED animations for Terrazzo are reactive to keyboard input. Each key press or encoder turn increments an internal counter, looping through the number of individual LEDs. 
     44 
     45 This counter (`terrazzo_led_index`) is used as a seed for the animation functions, along with a boolean indicating the direction. Turning the encoder counter-clockwise, or pressing backspace will decrement the counter, allowing for animations to reverse or display alternative frames.
     46 
     47 The current animations are:
     48 
     49 - DINO: It's like your internet went out
     50 - DOT: Just a single led at a time, for debugging
     51 - HEART: Love you too
     52 - OUTRUN: Driving into the sunset
     53 - PAC_DUDE: Vintage arcade fun
     54 - STRIPES: Just a nice gradient
     55 - WPM_CHART: 2 digit readout with lights indicating speed, each pixel = 2 wpm
     56 
     57 Not all animations are enabled by default. You can enable or disable animations in the `config.h` file to limit firmware size.
     58 
     59 ```
     60 // #define DISABLE_TERRAZZO_EFFECT_STRIPES
     61 // #define DISABLE_TERRAZZO_EFFECT_DINO
     62 // #define DISABLE_TERRAZZO_EFFECT_OUTRUN
     63 #define DISABLE_TERRAZZO_EFFECT_PAC_DUDE
     64 #define DISABLE_TERRAZZO_EFFECT_HEART
     65 // #define DISABLE_TERRAZZO_EFFECT_WPM_CHART
     66 #define DISABLE_TERRAZZO_EFFECT_DOT
     67 ```
     68 
     69 ## Microcontroller Support
     70 
     71 Terrazzo is designed for use with a Pro Micro (or compatible, like Bit-C), or an Elite-C. The extra pinouts of an Elite-C are required for the ortho MIT and ALL layouts and multiple encoders. By default the firmware is set up for an Elite-C. For a Pro Micro some changes to `config.h` are needed.
     72 
     73 Change number of rows from 9 to 8.
     74 ```
     75 #define MATRIX_ROWS 8
     76 ```
     77 
     78 Change pinouts, Pro Micro does not have the "F0" pin.
     79 ```
     80 #define MATRIX_ROW_PINS { D2, D7, E6, B4, B5, B6, B2, B3 }
     81 ```
     82 
     83 Set encoder to just top or bottom position.
     84 ```
     85 #define ENCODER_A_PINS { C6 }
     86 #define ENCODER_B_PINS { D4 }
     87 ```
     88 
     89 ## Encoder Setup
     90 
     91 Terrazzo has 4 positions for encoders in the left-hand column. Up to 3 may be used at a time, but this requires the extra pins of an Elite-C. Please refer to `config.h` for examples of pin configurations.
     92 
     93 The default keymaps are setup for one encoder. Encoders can change behavior based on the current layer. Here, on the "NAV" layer, the encoder changes volume instead of scrolling.
     94 
     95 ```c
     96 bool encoder_update_user(uint8_t index, bool clockwise) {
     97     terrazzo_scroll_pixel(clockwise);
     98     switch(get_highest_layer(layer_state)) {
     99       case _NAV:
    100         // Change volume when on nav layer
    101         clockwise ? tap_code(KC_AUDIO_VOL_UP) : tap_code(KC_AUDIO_VOL_DOWN);
    102         break;
    103       default:
    104         // Default encoder behavior of Page Up and Down
    105         clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
    106         break;
    107     }   
    108     return true;
    109 }
    110 ```
    111 
    112 If using multiple encoders, the `index` param can be used to distingish which is providing input.
    113 
    114 ```c
    115 bool encoder_update_user(uint8_t index, bool clockwise) {
    116     terrazzo_scroll_pixel(clockwise);
    117     switch(index) {
    118       case 0:
    119         clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
    120         break;
    121       case 1:
    122         clockwise ? tap_code(KC_AUDIO_VOL_UP) : tap_code(KC_AUDIO_VOL_DOWN);
    123         break;        
    124     }
    125     return true;
    126 }
    127 ```