82 lines
2.1 KiB
Rust
82 lines
2.1 KiB
Rust
use std::{thread, time::Duration};
|
|
|
|
use embedded_hal::digital::blocking::OutputPin;
|
|
use embedded_hal_0_2::{adc::OneShot, digital::v2::InputPin};
|
|
use esp_idf_hal::{
|
|
adc::{Adc, Atten11dB, PoweredAdc, ADC1},
|
|
gpio::{Gpio1, Gpio2}, delay,
|
|
};
|
|
use esp_idf_sys::EspError;
|
|
|
|
use crate::{dc_out_controller::DcOutController, screen::Screen};
|
|
|
|
type AdapterGpio = Gpio1<Atten11dB<ADC1>>;
|
|
type BatteryGpio = Gpio2<Atten11dB<ADC1>>;
|
|
|
|
pub struct Manager<C>
|
|
where
|
|
C: OutputPin,
|
|
{
|
|
dc_out_controller: DcOutController<C>,
|
|
screen: Screen,
|
|
adc: PoweredAdc<ADC1>,
|
|
adapter_pin: AdapterGpio,
|
|
battery_pin: BatteryGpio,
|
|
}
|
|
|
|
impl<C> Manager<C>
|
|
where
|
|
C: OutputPin,
|
|
{
|
|
pub fn new(
|
|
dc_out_controller: DcOutController<C>,
|
|
screen: Screen,
|
|
adc1: ADC1,
|
|
adapter_pin: AdapterGpio,
|
|
battery_pin: BatteryGpio,
|
|
) -> Result<Self, EspError> {
|
|
let adc = PoweredAdc::new(
|
|
adc1,
|
|
esp_idf_hal::adc::config::Config::new().calibration(true),
|
|
)?;
|
|
return Ok(Manager {
|
|
dc_out_controller,
|
|
screen,
|
|
adc,
|
|
adapter_pin,
|
|
battery_pin,
|
|
});
|
|
}
|
|
|
|
pub fn get_adapter_voltage(&mut self) -> Result<f32, EspError> {
|
|
return Ok(self.adc.read(&mut self.adapter_pin).unwrap() as f32);
|
|
}
|
|
pub fn get_battery_voltage(&mut self) -> Result<f32, EspError> {
|
|
return Ok(self.adc.read(&mut self.battery_pin).unwrap() as f32);
|
|
}
|
|
|
|
pub fn handling_once(&mut self) -> Result<(), EspError> {
|
|
let mut adapter = 0.0_f32;
|
|
let mut battery = 0.0_f32;
|
|
for _ in 0..10 {
|
|
adapter += self.get_adapter_voltage()?;
|
|
battery += self.get_battery_voltage()?;
|
|
thread::sleep(Duration::from_millis(10));
|
|
}
|
|
|
|
adapter /= 10.0_f32;
|
|
battery /= 10.0_f32;
|
|
|
|
if adapter < 1000.0 {
|
|
self.dc_out_controller.off().expect("Can not turn off Out");
|
|
} else {
|
|
self.dc_out_controller.on().expect("Can not turn on Out");
|
|
}
|
|
self.screen
|
|
.draw_voltage(adapter, battery)
|
|
.expect("Failed to draw voltage");
|
|
|
|
Ok({})
|
|
}
|
|
}
|