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コンパス

このセクションでは、F3 上の LED を使ってコンパスを実装します。本物のコンパスと同じように、この LED コンパスも何らかの方法で北を指さなければなりません。これは 8 個ある LED のうち 1 つを点灯させることで実現します。点灯している LED が北を向くようにします。

磁場には、ガウスまたはテスラで測定される大きさと、方向 の両方があります。F3 の磁力計は外部磁場の大きさと方向の両方を測定しますが、その磁場を 各軸 に沿って分解した成分として返します。

以下を見てください。磁力計には 3 つの軸が対応付けられています。

上には X 軸と Y 軸しか示されていません。Z 軸は画面の「手前」を向いています。

以下のスターターコードを実行して、磁力計の読み取り値に慣れましょう。

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

#[allow(unused_imports)]
use aux15::{entry, iprint, iprintln, prelude::*};

#[entry]
fn main() -> ! {
    let (_leds, mut lsm303dlhc, mut delay, mut itm) = aux15::init();

    loop {
        iprintln!(&mut itm.stim[0], "{:?}", lsm303dlhc.mag().unwrap());
        delay.delay_ms(1_000_u16);
    }
}

この lsm303dlhc モジュールは、LSM303DLHC に対する高レベル API を提供します。内部では、前のセクションで実装したのと同じ I2C ルーチンを実行していますが、X、Y、Z の値をタプルではなく I16x3 構造体で返します。

今いる場所で北がどちらにあるかを確認してください。次に、基板が「北向き」にそろうように回転させます。North LED(LD3)が北を向いているはずです。

では、スターターコードを実行して出力を観察してください。X、Y、Z の値はどのように表示されますか?

$ # itmdump terminal
(..)
I16x3 { x: 45, y: 194, z: -3 }
I16x3 { x: 46, y: 195, z: -8 }
I16x3 { x: 47, y: 197, z: -2 }

次に、基板を地面と平行に保ったまま 90 度回転させてください。今度は X、Y、Z にどのような値が表示されますか? その後、さらに 90 度回転させてください。どのような値が表示されますか?