r_d_inclita_sofware/sensors/
adxl345.rs1use crate::telemetry::data::{AccelData, DATA_CHANNEL, LATEST_TELEMETRY, LogEvent};
2use defmt::{error, info};
3use embassy_stm32::i2c::I2c;
4use embassy_stm32::mode::Blocking;
5use embassy_time::{Duration, Ticker};
6use lh_adxl345 as adxl; #[embassy_executor::task]
9pub async fn adxl343_task(i2c: I2c<'static, Blocking, embassy_stm32::i2c::Master>) {
10 info!("Initializing ADXL345 via lh-adxl345 crate at 0x1D...");
11
12 let adxl_bus = adxl::AdxlBusI2c {
15 i2c,
16 addr: 0x1D, };
18
19 let mut accelerometer = adxl::Adxl345::new(adxl_bus);
21
22 if let Err(_) = accelerometer.init_defaults() {
24 error!("Failed to initialize lh-adxl345 crate! Check wiring.");
25 return;
26 }
27
28 let mut ticker = Ticker::every(Duration::from_millis(50));
30
31 loop {
32 match accelerometer.read_axis() {
35 Ok((x, y, z)) => {
36 let accel_data = AccelData {
37 raw_x: x,
38 raw_y: y,
39 raw_z: z,
40 timestamp_ms: embassy_time::Instant::now().as_millis() as u32,
41 };
42
43 {
45 let mut guard = LATEST_TELEMETRY.lock().await;
46 }
48
49 }
52 Err(_) => error!("Failed to read axis from lh-adxl345 crate"),
53 }
54
55 ticker.next().await;
57 }
58}