Files
stm32_rust/2sem_i2c/src/bin/main.rs
2026-03-03 18:02:57 +01:00

47 lines
1.4 KiB
Rust

// src/bin/main.rs
#![no_std]
#![no_main]
use defmt::*;
use embassy_executor::Spawner;
use embassy_stm32::i2c::{Config, I2c};
use embassy_time::{Duration, Timer};
use {defmt_rtt as _, panic_probe as _};
#[embassy_executor::main]
async fn main(_spawner: Spawner) {
info!("tititi");
let p = embassy_stm32::init(Default::default());
let mut i2c_cfg = Config::default();
i2c_cfg.sda_pullup = true;
i2c_cfg.scl_pullup = true;
i2c_cfg.timeout = Duration::from_millis(200);
let mut i2c = I2c::new_blocking(p.I2C3, p.PC0, p.PC1, i2c_cfg);
let addr = 0x23;
if let Err(e) = i2c.blocking_write(addr, &[0x01, 0x79]) {
error!("Nepodarilo sa aktivovať CMM: {:?}", e);
}
loop {
let mut raw = [0u8; 9];
match i2c.blocking_write_read(addr, &[0x24], &mut raw) {
Ok(_) => {
let x = i32::from_be_bytes([raw[0], raw[1], raw[2], 0]) >> 8;
let y = i32::from_be_bytes([raw[3], raw[4], raw[5], 0]) >> 8;
let z = i32::from_be_bytes([raw[6], raw[7], raw[8], 0]) >> 8;
info!("X: {}, Y: {}, Z: {}", x, y, z);
}
Err(e) => {
error!("Chyba pri čítaní: {:?}", e);
}
}
// Čítajte napríklad každých 100ms. Dáta v registroch budú vždy najaktuálnejšie dokončené meranie.
Timer::after(Duration::from_millis(100)).await;
}
}