lis3dh 0.4.4

An embedded-hal driver for the LIS3DH accelerometer that implements the generic accelerometer trait
Documentation
#![no_std]
#![no_main]

use circuit_playground_express as hal;
extern crate panic_halt;

use accelerometer::{RawAccelerometer, Tracker};
use cortex_m_rt::entry;
use cortex_m_semihosting::hprintln;
use hal::clock::GenericClockController;
use hal::delay::Delay;
use hal::pac::{CorePeripherals, Peripherals};
use hal::prelude::*;
use hal::sercom::{I2CMaster1, PadPin};
use hal::time::KiloHertz;

use lis3dh::{Lis3dh, SlaveAddr};

#[entry]
fn main() -> ! {
    let mut peripherals = Peripherals::take().unwrap();
    let core = CorePeripherals::take().unwrap();
    let mut clocks = GenericClockController::with_internal_32kosc(
        peripherals.GCLK,
        &mut peripherals.PM,
        &mut peripherals.SYSCTRL,
        &mut peripherals.NVMCTRL,
    );
    let mut pins = hal::Pins::new(peripherals.PORT);
    let gclk0 = clocks.gclk0();

    let i2c = I2CMaster1::new(
        &clocks.sercom1_core(&gclk0).unwrap(),
        KiloHertz(400),
        peripherals.SERCOM1,
        &mut peripherals.PM,
        pins.accel_sda.into_pad(&mut pins.port),
        pins.accel_scl.into_pad(&mut pins.port),
    );

    let mut lis3dh = Lis3dh::new_i2c(i2c, SlaveAddr::Alternate).unwrap();
    lis3dh.set_range(lis3dh::Range::G8).unwrap();
    let mut delay = Delay::new(core.SYST, &mut clocks);

    let mut tracker = Tracker::new(3700.0);

    loop {
        let accel = lis3dh.accel_raw().unwrap();
        let orientation = tracker.update(accel);
        hprintln!("{:?}", orientation).ok();
        delay.delay_ms(1000u16)
    }
}