use mq135::{GasType, Mq135};
use embedded_hal::adc::{OneShot, Channel};
use core::convert::Infallible;
#[derive(Default)]
struct MockPin;
struct MockADC {
value: u16,
}
impl Channel<MockADC> for MockPin {
type ID = ();
fn channel() -> Self::ID {
()
}
}
impl OneShot<MockADC, u16, MockPin> for MockADC {
type Error = Infallible;
fn read(&mut self, _pin: &mut MockPin) -> nb::Result<u16, Self::Error> {
Ok(self.value)
}
}
#[test]
fn test_mq135_workflow() {
let adc_value = 2048; let adc = MockADC { value: adc_value };
let pin = MockPin::default();
let mut sensor = Mq135::new(adc, pin, 10.0);
assert!(sensor.calibrate_in_clean_air().is_ok());
let ppm_result = sensor.read_gas_ppm(GasType::CO2);
assert!(ppm_result.is_ok());
let ppm = ppm_result.unwrap();
println!("Simulated CO2 PPM: {}", ppm);
assert!(ppm > 0.0); }