Компас
Ми прочитаємо напрямок із компаса I2C і запишемо показання до послідовного порту. Якщо у вас є час, спробуйте ще якось відобразити його на світлодіодах або якось кнопками.
Підказки:
- Перегляньте документацію для
lsm303agr
і [microbit-v2
](https://docs.rs/microbit-v2/latest/microbit /) крейтів, а також micro:bit hardware. - Інерційний вимірювальний блок LSM303AGR підключено до внутрішньої шини I2C.
- TWI — це інша назва I2C, тому головний периферійний пристрій I2C називається TWIM.
- Драйверу LSM303AGR потрібно щось, що реалізує трейт
embedded_hal::i2c::I2c
. Структураmicrobit::hal::Twim
реалізує це. - У вас є структура
microbit::Board
з полями для різних контактів і периферійних пристроїв. - Ви також можете переглянути технічну таблицю nRF52833, якщо хочете, але це не обов’язково для цієї вправи.
Завантажте шаблон вправи і знайдіть у каталозі 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 (це не потрібно змінювати):
[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.1"
panic-halt = "0.2.0"
Embed.toml (це не потрібно змінювати):
[default.general]
chip = "nrf52833_xxAA"
[debug.gdb]
enabled = true
[debug.reset]
halt_afterwards = true
.cargo/config.toml (це не потрібно змінювати):
[build]
target = "thumbv7em-none-eabihf" # Cortex-M4F
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
rustflags = ["-C", "link-arg=-Tlink.x"]
Перегляньте послідовний вивід у Linux за допомогою:
picocom --baud 115200 --imap lfcrlf /dev/ttyACM0
Або в Mac OS щось на зразок (назва пристрою може трохи відрізнятися):
picocom --baud 115200 --imap lfcrlf /dev/tty.usbmodem14502
Використовуйте Ctrl+A Ctrl+Q, щоб вийти з picocom.