mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-03-23 15:14:35 +02:00
Display compass values on LEDs.
This commit is contained in:
parent
82f4dab523
commit
44a4b4b234
@ -21,16 +21,21 @@ extern crate panic_halt as _;
|
|||||||
use core::fmt::Write;
|
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 lsm303agr::{Lsm303agr, MagOutputDataRate};
|
use lsm303agr::{Lsm303agr, MagOutputDataRate};
|
||||||
use microbit::{
|
use microbit::{
|
||||||
|
display::blocking::Display,
|
||||||
hal::{
|
hal::{
|
||||||
twim::Twim,
|
twim::Twim,
|
||||||
uarte::{Baudrate, Parity, Uarte},
|
uarte::{Baudrate, Parity, Uarte},
|
||||||
|
Timer,
|
||||||
},
|
},
|
||||||
pac::twim0::frequency::FREQUENCY_A,
|
pac::twim0::frequency::FREQUENCY_A,
|
||||||
Board,
|
Board,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const COMPASS_SCALE: i32 = 30000;
|
||||||
|
|
||||||
// ANCHOR: main
|
// ANCHOR: main
|
||||||
#[entry]
|
#[entry]
|
||||||
fn main() -> ! {
|
fn main() -> ! {
|
||||||
@ -53,6 +58,10 @@ fn main() -> ! {
|
|||||||
imu.set_mag_odr(MagOutputDataRate::Hz50).unwrap();
|
imu.set_mag_odr(MagOutputDataRate::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.
|
||||||
|
let mut timer = Timer::new(board.TIMER0);
|
||||||
|
let mut display = Display::new(board.display_pins);
|
||||||
|
|
||||||
// ANCHOR: loop
|
// ANCHOR: loop
|
||||||
writeln!(serial, "Ready.").unwrap();
|
writeln!(serial, "Ready.").unwrap();
|
||||||
|
|
||||||
@ -67,5 +76,25 @@ fn main() -> ! {
|
|||||||
compass_reading.x, compass_reading.y, compass_reading.z
|
compass_reading.x, compass_reading.y, compass_reading.z
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
let mut image = [[0; 5]; 5];
|
||||||
|
let x = scale(-compass_reading.x, -COMPASS_SCALE, COMPASS_SCALE, 0, 4) as usize;
|
||||||
|
let y = scale(compass_reading.y, -COMPASS_SCALE, COMPASS_SCALE, 0, 4) as usize;
|
||||||
|
image[y][x] = 255;
|
||||||
|
display.show(&mut timer, image, 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn scale(value: i32, min_in: i32, max_in: i32, min_out: i32, max_out: i32) -> i32 {
|
||||||
|
let range_in = max_in - min_in;
|
||||||
|
let range_out = max_out - min_out;
|
||||||
|
cap(
|
||||||
|
min_out + range_out * (value - min_in) / range_in,
|
||||||
|
min_out,
|
||||||
|
max_out,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cap(value: i32, min_value: i32, max_value: i32) -> i32 {
|
||||||
|
max(min_value, min(value, max_value))
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user