Skip to main content

embassy_max4466/
lib.rs

1// Copyright (C) 2026  Jorge Andre Castro
2// GPL-2.0-or-later
3
4//! # embassy-max4466
5//!
6//! Driver async `no_std` pour le capteur micro MAX4466, basé sur Embassy.
7//!
8//! ## Features optionnelles
9//!
10//! | Feature          | Description                              |
11//! |------------------|------------------------------------------|
12//! | `filter-ema`     | Active le filtre EMA (moyenne exponentielle mobile) |
13//! | `filter-median`  | Active le filtre médian (fenêtre glissante de 5 samples) |
14//!
15//! Par défaut, aucun filtre n'est activé : `read_raw` retourne la valeur ADC brute.
16//!
17//! ## Exemple minimal
18//!
19//! ```rust,ignore
20//! use embassy_max4466::Max4466;
21//! use embassy_rp::adc::{Adc, Channel, Config};
22//!
23//! #[embassy_executor::task]
24//! async fn micro_task(adc: Adc<'static, Async>, ch: Channel<'static>) {
25//!     let mut mic = Max4466::new(adc, ch);
26//!     mic.calibrate().await;
27//!
28//!     loop {
29//!         let amplitude = mic.read_amplitude(50).await;
30//!         defmt::info!("Amplitude: {}", amplitude);
31//!     }
32//! }
33//! ```
34//!
35//! ## Exemple avec signal global
36//!
37//! ```rust,ignore
38//! use embassy_max4466::signals::MIC_SIGNAL;
39//!
40//! #[embassy_executor::task]
41//! async fn afficher_micro() {
42//!     loop {
43//!         let data = MIC_SIGNAL.wait().await;
44//!         defmt::info!("Amplitude: {}  Raw: {}", data.amplitude, data.raw);
45//!     }
46//! }
47//! ```
48
49#![no_std]
50#![allow(async_fn_in_trait)]
51
52pub mod driver;
53pub mod signals;
54
55#[cfg(feature = "filter-ema")]
56pub mod filter_ema;
57
58#[cfg(feature = "filter-median")]
59pub mod filter_median;
60
61pub use driver::Max4466;
62
63/// Données publiées sur [`signals::MIC_SIGNAL`].
64#[derive(Clone, Copy)]
65pub struct MicData {
66    /// Valeur ADC brute (0–4095 sur 12 bits).
67    pub raw: u16,
68    /// Amplitude crête-à-crête sur la fenêtre de mesure.
69    pub amplitude: u16,
70}