LED 指南针

在本节中,我们将使用F3上的LED来实现指南针。像正确的指南针一样,我们的LED指南针必须以某种方式指向北方。 它将通过打开八个LED中的一个来实现这一点;开启的LED应指向北方。

磁场既有以高斯或特斯拉为单位测量的大小,也有方向。F3上的磁强计测量外部磁场的大小和方向,但它沿其轴报告所述磁场的分解

见下图,磁力计有三个轴与之相关。

上面只显示了X轴和Y轴。Z轴指向屏幕"out"。

让我们通过运行以下启动代码来熟悉磁力计的读数:

#![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例程,但它在I16x3结构中而不是在元组中报告X、Y和Z值。

找到当前位置的北向位置。然后旋转电路板,使其"朝北"对其:北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度。你看到了什么值?