قطبنما
ما جهت را از قطبنمای 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 استفاده کنید.