use esp_hal::Blocking;
use esp_hal::analog::adc::{Adc, AdcConfig, AdcPin, Attenuation};
use esp_hal::peripherals::{ADC1, GPIO3};
pub struct AdcCfg {
pub attenuation: Attenuation,
}
type AdcMode = Blocking;
pub struct Adcbattery<'d> {
adc: Adc<'d, ADC1<'d>, AdcMode>,
pin: AdcPin<GPIO3<'d>, ADC1<'d>>,
}
pub fn init_adcbattery<'d>(
adcpin: GPIO3<'d>,
adc_cfg: AdcCfg,
adcp: esp_hal::peripherals::ADC1<'d>,
) -> Adcbattery<'d> {
let mut adc1_config = AdcConfig::new();
let pin = adc1_config.enable_pin(adcpin, adc_cfg.attenuation);
let adc = Adc::new(adcp, adc1_config);
Adcbattery { adc, pin }
}
impl<'d> Adcbattery<'d> {
pub fn read(&mut self) -> u16 {
self.adc.read_blocking(&mut self.pin)
}
pub fn read_voltage_mv(&mut self) -> u16 {
let raw = self.read() as f32;
((raw / 4095.0) * 3.1 / (100.0 / (33.0 + 100.0)) * 1000.0) as u16
}
}