Desafio

Agora você está bem armado para enfrentar um desafio! Sua tarefa será implementar a aplicação que mostrei a você no início deste capítulo.

Se você não consegue ver exatamente o que está acontecendo, aqui está em uma versão muito mais lenta:

Como trabalhar com os pinos de LED separadamente é bastante incômodo (especialmente se você tiver que usar basicamente todos eles, como aqui) você pode usar a API de exibição fornecida pelo BSP. Ela funciona da seguinte forma:

#![deny(unsafe_code)]
#![no_main]
#![no_std]

use cortex_m_rt::entry;
use rtt_target::rtt_init_print;
use panic_rtt_target as _;
use microbit::{
    board::Board,
    display::blocking::Display,
    hal::{prelude::*, Timer},
};

#[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 light_it_all = [
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
    ];

    loop {
        // Exibe light_it_all por 1000ms
        display.show(&mut timer, light_it_all, 1000);
        // Limpa a exibição novamente
        display.clear();
        timer.delay_ms(1000_u32);
    }
}

Equipado com essa API, sua tarefa basicamente se resume a calcular a matriz de imagem adequada e passá-la para o BSP.