قطب‌نما

ما جهت را از قطب‌نمای I2C می خوانیم و خوانش‌ها را در یک پورت سریال ثبت می‌کنیم. اگر وقت دارید، سعی کنید آن را به نحوی روی LED‌ها نیز نمایش دهید یا به نوعی از دکمه‌ها استفاده کنید.

نکته‌ها:

  • مستندات lsm303agr و microbit-v2 به همراه crateهای آن را بررسی کنید همانطور که micro:bit hardware را بررسی می‌کنید.
  • واحد اندازه‌گیری اینرسی در قطعه LSM303AGR به bus داخلی I2C متصل است.
  • TWI نام دیگری برای I2C است، بنابراین دستگاه جانبی اصلی I2C TWIM نامیده می‌شود.
  • درایور LSM303AGR به چیزی نیاز دارد که ویژگی embedded_hal::i2c::I2c را اجرا کند. ساختارmicrobit::hal::Twim این مورد را پیاده‌سازی می‌کند.
  • شما یک ساختار ‘microbit::Board’ با فیلدهایی برای پین‌ها و تجهیزات جانبی مختلف دارید.
  • در صورت تمایل می‌توانید به nRF52833 datasheet نیز نگاه کنید، اما برای این تمرین لازم نیست.

این الگوی تمرین را دانلود کنید و فایل‌های زیر را در دایرکتوری 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 (you shouldn’t need to change this):

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

مشاهده خروجی سریال در لینوکس با:

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

یا در سیستم‌عامل Mac چیزی شبیه به (نام دستگاه ممکن است کمی متفاوت باشد):

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

برای خروج از picocom از Ctrl+A و Ctrl+Q استفاده کنید.