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度。你看到了什么值?