//* left/right/on/off Menu Functionality optimized for LED for the Homework Problem *

#define MAX_LED (0b00001000) #define MIN_LED (0b00000001) static uint8_t LED_current = 1; // one hot addressing static uint8_t LED_mode = 0; // one bit per LED ... if ( _key_off_pressed_detected_ ) { LED_mode = LED_mode & ~LED_current; } ... if ( _key_on_pressed_detected_ ) { LED_mode = LED_mode | LED_current; } ... if ( _key_left_pressed_detected_ ) { if ( LED_current<MAX_LED) { setLED( (getLED() & ~LED_current) | (LED_mode & LED_current) ); LED_current = LED_current<<1; if ( 0 != (LED_mode & LED_current) ) { _set_coefficients_for_long_blink_ } else { _set_coefficients_for_short_blink_ } } } ... if ( _key_right_pressed_detected_ ) {\ if ( LED_current>MIN_LED) { setLED( (getLED() & ~LED_current) | (LED_mode & LED_current) ); LED_current = LED_current>>1; if ( 0 != (LED_mode & LED_current) ) { _set_coefficients_for_long_blink_ } else { _set_coefficients_for_short_blink_ } } } ... // do a blink inside the code for blinking (toggle, not on/off!) setLED( (getLED() ^LED_current) );