My solution
Here's my solution (in src/main.rs). Hopefully that was pretty easy. You'll soon see that simple polling like this is not very practical.
#![no_main] #![no_std] use cortex_m_rt::entry; use embedded_hal::digital::InputPin; use microbit::{board::Board, display::blocking::Display, hal::Timer}; use panic_rtt_target as _; use rtt_target::rtt_init_print; // Define LED patterns const LEFT_ARROW: [[u8; 5]; 5] = [ [0, 0, 1, 0, 0], [0, 1, 0, 0, 0], [1, 1, 1, 1, 1], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], ]; const RIGHT_ARROW: [[u8; 5]; 5] = [ [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [1, 1, 1, 1, 1], [0, 0, 0, 1, 0], [0, 0, 1, 0, 0], ]; const CENTER_LED: [[u8; 5]; 5] = [ [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], ]; #[entry] fn main() -> ! { rtt_init_print!(); let board = Board::take().unwrap(); let mut timer = Timer::new(board.TIMER0); let mut display = Display::new(board.display_pins); let mut button_a = board.buttons.button_a; let mut button_b = board.buttons.button_b; loop { if button_a.is_low().unwrap() { display.show(&mut timer, LEFT_ARROW, 10); } else if button_b.is_low().unwrap() { display.show(&mut timer, RIGHT_ARROW, 10); } else { display.show(&mut timer, CENTER_LED, 10); } } }