// Runs constantly in the background, in a loop. void matrix_scan_user(void) { /* leds is a static array holding the current brightness of each of the * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and * -1s in the code below, and because wasting a byte really doesn't matter * that much (no, it *doesn't*, stop whinging!). Note that because it's * static it'll maintain state across invocations of this routine. */ static uint8_t leds[4]; uint8_t led; uint8_t layer = biton32(layer_state); ergodox_board_led_off(); /* Loop over each LED/layer */ for (led = 1; led <= 3; ++led) { /* If the current layer matches the current LED, increment its * brightness by 1 up to a maximum of 255. If the current layer doesn't * match, decrement its brightness by 1 down to a minimum of zero. */ leds[led] += (layer == led) ? (leds[led] < 255 ? 1 : 0): (leds[led] > 0 ? -1 : 0); /* Set LED state according to the new brightness */ if (leds[led]) { ergodox_right_led_on(led); ergodox_right_led_set(led, leds[led]); } else { ergodox_right_led_off(led); } } };
static void blink_led(uint8_t led) { ergodox_led_all_off(); ergodox_right_led_set(led, LED_BRIGHTNESS_HI); ergodox_right_led_on(led); _delay_ms(150); ergodox_right_led_off(led); _delay_ms(50); ergodox_right_led_on(led); _delay_ms(150); ergodox_right_led_off(led); _delay_ms(50); ergodox_right_led_on(led); _delay_ms(150); ergodox_right_led_off(led); }