Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

LEDルーレット

それでは、「本物の」アプリケーションを作ってみましょう。目標は、この回転するライト表示を実現することです。

LEDピンを個別に扱うのはかなり面倒なので(特に今回のように、基本的にそのほとんどすべてを 使わなければならない場合は)、前に説明した microbit-v2 BSPクレートを使って、 MB2 の LED「ディスプレイ」を扱うことができます。これは次のように動作します(examples/light-it-all.rs):

#![no_main]
#![no_std]

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

#[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 {
        // Show light_it_all for 1000ms
        display.show(&mut timer, light_it_all, 1000);
        // clear the display again
        display.clear();
        timer.delay_ms(1000_u32);
    }
}

例で示した Rust 配列 light_it_all には、LED が点灯している場所に 1、消灯している場所に 0 が 入っています。show() の呼び出しには、BSP のディスプレイコードが遅延に使用するタイマー、配列の コピー、 そしてこの表示を表示してから復帰するまでの時間(ミリ秒)を渡します。