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}