すべてを組み合わせる: 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