use embedded_hal::adc::OneShot; use rp2040_hal::{ adc::AdcPin, gpio::{ bank0::{Gpio26, Gpio28}, FunctionNull, Pin, PullNone, }, Adc, }; // u16, 3.3V ADC, resistor half-divider const FACTOR: f64 = 3.3 * 2.0 / 4095.0; type Batt = Pin<Gpio26, FunctionNull, PullNone>; type Usb = Pin<Gpio28, FunctionNull, PullNone>; pub struct VoltMeter { batt: AdcPin<Batt>, usb: AdcPin<Usb>, adc: Adc, } impl VoltMeter { pub fn new(adc: Adc, batt: Batt, usb: Usb) -> Self { let batt = AdcPin::new(batt); let usb = AdcPin::new(usb); Self { batt, usb, adc } } pub fn voltage(&mut self) -> (f64, f64) { let batt: u16 = self.adc.read(&mut self.batt).unwrap(); let usb: u16 = self.adc.read(&mut self.usb).unwrap(); (batt as f64 * FACTOR, usb as f64 * FACTOR) } }