BĂșssola

Leremos a direção de uma bĂșssola I2C e registraremos as leituras em uma porta serial. Se vocĂȘ tiver tempo, tente exibi-lo nos LEDs de alguma forma tambĂ©m, ou use os botĂ”es de alguma forma.

Dicas:

  • Verifique a documentação dos crates lsm303agr e microbit-v2, bem como o hardware micro:bit.
  • A Unidade de Medição Inercial LSM303AGR estĂĄ conectada ao barramento I2C interno.
  • TWI Ă© outro nome para I2C, portanto, o perifĂ©rico mestre I2C Ă© chamado de TWIM.
  • O driver LSM303AGR precisa de algo que implemente o trait embedded_hal::i2c::I2c. O struct microbit::hal::Twim implementa isso.
  • VocĂȘ tem um struct microbit::Board com campos para os vĂĄrios pinos e perifĂ©ricos.
  • VocĂȘ tambĂ©m pode olhar a datasheet nRF52833 se quiser, mas nĂŁo deve ser necessĂĄrio para este exercĂ­cio.

Baixe o modelo de exercĂ­cio e procure os seguintes arquivos no diretĂłrio compass.

src/main.rs:

#![no_main] #![no_std] extern crate panic_halt as _; use core::fmt::Write; use cortex_m_rt::entry; use microbit::{hal::{Delay, uarte::{Baudrate, Parity, Uarte}}, Board}; #[entry] fn main() -> ! { let mut board = Board::take().unwrap(); // Configure serial port. let mut serial = Uarte::new( board.UARTE0, board.uart.into(), Parity::EXCLUDED, Baudrate::BAUD115200, ); // Use the system timer as a delay provider. let mut delay = Delay::new(board.SYST); // Set up the I2C controller and Inertial Measurement Unit. // TODO writeln!(serial, "Ready.").unwrap(); loop { // Read compass data and log it to the serial port. // TODO } }

Cargo.toml (vocĂȘ nĂŁo deve precisar alterar isso):

[workspace] [package] name = "compass" version = "0.1.0" edition = "2021" publish = false [dependencies] cortex-m-rt = "0.7.3" embedded-hal = "1.0.0" lsm303agr = "1.1.0" microbit-v2 = "0.15.0" panic-halt = "0.2.0"

Embed.toml (vocĂȘ nĂŁo deve precisar alterar isso):

[default.general] chip = "nrf52833_xxAA" [debug.gdb] enabled = true [debug.reset] halt_afterwards = true

.cargo/config.toml (vocĂȘ nĂŁo deve precisar alterar isso):

[build] target = "thumbv7em-none-eabihf" # Cortex-M4F [target.'cfg(all(target_arch = "arm", target_os = "none"))'] rustflags = ["-C", "link-arg=-Tlink.x"]

Veja a saĂ­da serial no Linux com:

picocom --baud 115200 --imap lfcrlf /dev/ttyACM0

Ou no Mac OS algo como (o nome do dispositivo pode ser um pouco diferente):

picocom --baud 115200 --imap lfcrlf /dev/tty.usbmodem14502

Use Ctrl+A Ctrl+Q para sair do picocom.