1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-05-28 21:27:37 +02:00

cargo: bump the minor group in /src/exercises/bare-metal/compass with 1 update (#1718)

Bumps the minor group in /src/exercises/bare-metal/compass with 1
update: [lsm303agr](https://github.com/eldruin/lsm303agr-rs).

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
dependabot[bot] 2024-01-18 12:08:15 +00:00 committed by GitHub
parent 9b8e4b3586
commit b4164e44a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 21 deletions

View File

@ -29,6 +29,12 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719"
[[package]]
name = "bitflags"
version = "2.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
[[package]] [[package]]
name = "bytemuck" name = "bytemuck"
version = "1.14.0" version = "1.14.0"
@ -161,10 +167,11 @@ dependencies = [
[[package]] [[package]]
name = "lsm303agr" name = "lsm303agr"
version = "0.2.2" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aab0b8c3a75dfdebe9f79c738458da139e8111207d176e9fb6b360117432ac4f" checksum = "82d672443f0535384ea86fff40c50156c5fae3fe0446242edeb9ff993b63e0dc"
dependencies = [ dependencies = [
"bitflags",
"embedded-hal", "embedded-hal",
"nb 1.1.0", "nb 1.1.0",
] ]

View File

@ -9,6 +9,6 @@ publish = false
[dependencies] [dependencies]
cortex-m-rt = "0.7.3" cortex-m-rt = "0.7.3"
embedded-hal = "0.2.6" embedded-hal = "0.2.6"
lsm303agr = "0.2.2" lsm303agr = "0.3.0"
microbit-v2 = "0.13.0" microbit-v2 = "0.13.0"
panic-halt = "0.2.0" panic-halt = "0.2.0"

View File

@ -23,12 +23,14 @@ use core::fmt::Write;
use cortex_m_rt::entry; use cortex_m_rt::entry;
// ANCHOR_END: top // ANCHOR_END: top
use core::cmp::{max, min}; use core::cmp::{max, min};
use lsm303agr::{AccelOutputDataRate, Lsm303agr, MagOutputDataRate}; use lsm303agr::{
AccelMode, AccelOutputDataRate, Lsm303agr, MagMode, MagOutputDataRate,
};
use microbit::display::blocking::Display; use microbit::display::blocking::Display;
use microbit::hal::prelude::*; use microbit::hal::prelude::*;
use microbit::hal::twim::Twim; use microbit::hal::twim::Twim;
use microbit::hal::uarte::{Baudrate, Parity, Uarte}; use microbit::hal::uarte::{Baudrate, Parity, Uarte};
use microbit::hal::Timer; use microbit::hal::{Delay, Timer};
use microbit::pac::twim0::frequency::FREQUENCY_A; use microbit::pac::twim0::frequency::FREQUENCY_A;
use microbit::Board; use microbit::Board;
@ -48,14 +50,27 @@ fn main() -> ! {
Baudrate::BAUD115200, 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. // Set up the I2C controller and Inertial Measurement Unit.
// ANCHOR_END: main // ANCHOR_END: main
writeln!(serial, "Setting up IMU...").unwrap(); writeln!(serial, "Setting up IMU...").unwrap();
let i2c = Twim::new(board.TWIM0, board.i2c_internal.into(), FREQUENCY_A::K100); let i2c = Twim::new(board.TWIM0, board.i2c_internal.into(), FREQUENCY_A::K100);
let mut imu = Lsm303agr::new_with_i2c(i2c); let mut imu = Lsm303agr::new_with_i2c(i2c);
imu.init().unwrap(); imu.init().unwrap();
imu.set_mag_odr(MagOutputDataRate::Hz50).unwrap(); imu.set_mag_mode_and_odr(
imu.set_accel_odr(AccelOutputDataRate::Hz50).unwrap(); &mut delay,
MagMode::HighResolution,
MagOutputDataRate::Hz50,
)
.unwrap();
imu.set_accel_mode_and_odr(
&mut delay,
AccelMode::Normal,
AccelOutputDataRate::Hz50,
)
.unwrap();
let mut imu = imu.into_mag_continuous().ok().unwrap(); let mut imu = imu.into_mag_continuous().ok().unwrap();
// Set up display and timer. // Set up display and timer.
@ -71,41 +86,41 @@ fn main() -> ! {
loop { loop {
// Read compass data and log it to the serial port. // Read compass data and log it to the serial port.
// ANCHOR_END: loop // ANCHOR_END: loop
while !(imu.mag_status().unwrap().xyz_new_data while !(imu.mag_status().unwrap().xyz_new_data()
&& imu.accel_status().unwrap().xyz_new_data) && imu.accel_status().unwrap().xyz_new_data())
{} {}
let compass_reading = imu.mag_data().unwrap(); let compass_reading = imu.magnetic_field().unwrap();
let accelerometer_reading = imu.accel_data().unwrap(); let accelerometer_reading = imu.acceleration().unwrap();
writeln!( writeln!(
serial, serial,
"{},{},{}\t{},{},{}", "{},{},{}\t{},{},{}",
compass_reading.x, compass_reading.x_nt(),
compass_reading.y, compass_reading.y_nt(),
compass_reading.z, compass_reading.z_nt(),
accelerometer_reading.x, accelerometer_reading.x_mg(),
accelerometer_reading.y, accelerometer_reading.y_mg(),
accelerometer_reading.z, accelerometer_reading.z_mg(),
) )
.unwrap(); .unwrap();
let mut image = [[0; 5]; 5]; let mut image = [[0; 5]; 5];
let (x, y) = match mode { let (x, y) = match mode {
Mode::Compass => ( Mode::Compass => (
scale(-compass_reading.x, -COMPASS_SCALE, COMPASS_SCALE, 0, 4) scale(-compass_reading.x_nt(), -COMPASS_SCALE, COMPASS_SCALE, 0, 4)
as usize, as usize,
scale(compass_reading.y, -COMPASS_SCALE, COMPASS_SCALE, 0, 4) scale(compass_reading.y_nt(), -COMPASS_SCALE, COMPASS_SCALE, 0, 4)
as usize, as usize,
), ),
Mode::Accelerometer => ( Mode::Accelerometer => (
scale( scale(
accelerometer_reading.x, accelerometer_reading.x_mg(),
-ACCELEROMETER_SCALE, -ACCELEROMETER_SCALE,
ACCELEROMETER_SCALE, ACCELEROMETER_SCALE,
0, 0,
4, 4,
) as usize, ) as usize,
scale( scale(
-accelerometer_reading.y, -accelerometer_reading.y_mg(),
-ACCELEROMETER_SCALE, -ACCELEROMETER_SCALE,
ACCELEROMETER_SCALE, ACCELEROMETER_SCALE,
0, 0,