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

すべてを組み合わせる: nrf-hal を使って LED を点滅させる

ペリフェラルのセットアップ、タイマーの初期化、必要な GPIO ピンの出力設定が完了したら、メインループはとてもシンプルになります。これは BSP の例で行ったこととよく似ています。

ループ内では、タイマーによる遅延を挟みながら row1 の状態を high と low の間で切り替えます。これによって点滅効果が生まれます。

#![allow(unused)]
fn main() {
    loop {
        timer0.delay_ms(500);
        row1.set_high().unwrap();

        timer0.delay_ms(500);
        row1.set_low().unwrap();
    }
}

完全なコード

#![no_std]
#![no_main]

use cortex_m_rt::entry;

// Embedded HAL のトレイト
use embedded_hal::delay::DelayNs;
use embedded_hal::digital::OutputPin;

// nRF HAL
use nrf52833_hal::gpio::Level;
use nrf52833_hal::pac::Peripherals;
use nrf52833_hal::{self as hal, timer::Timer};

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
    loop {}
}

#[entry]
fn main() -> ! {
    let peripherals = Peripherals::take().unwrap();
    let mut timer0 = Timer::new(peripherals.TIMER0);

    let port0 = hal::gpio::p0::Parts::new(peripherals.P0);
    let _col1 = port0.p0_28.into_push_pull_output(Level::Low);
    let mut row1 = port0.p0_21.into_push_pull_output(Level::High);

    loop {
        timer0.delay_ms(500);
        row1.set_high().unwrap();

        timer0.delay_ms(500);
        row1.set_low().unwrap();
    }
}

既存のプロジェクトをクローンする

私が作成したプロジェクトをクローン(または参照)して、hal/led-blinky フォルダーに移動することもできます。

git clone https://github.com/ImplFerris/microbit-projects
cd microbit-projects/hal/led-blinky

フラッシュ

このプログラムを micro:bit に書き込むと、点滅効果が確認できるはずです

cargo flash