lilkaoxide 0.1.0

Rust support library for Lilka console
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> {
    /// Reads battery ADC value (0-4095).
    pub fn read(&mut self) -> u16 {
        self.adc.read_blocking(&mut self.pin)
    }

    /// Reads battery voltage in millivolts.
    /// Formula: (adc_value / 4095.0) * 3.1 / (100.0 / (33.0 + 100.0)) = (adc_value / 4095.0) * 11.73
    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
    }
}