From 5934336984edd7122bddc3cc163159dbb650473c Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Sat, 15 Nov 2025 15:33:38 -0700 Subject: [PATCH] add battery level checking --- ch32v-insert-coin/src/main.rs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/ch32v-insert-coin/src/main.rs b/ch32v-insert-coin/src/main.rs index 7517136..4f9aaae 100644 --- a/ch32v-insert-coin/src/main.rs +++ b/ch32v-insert-coin/src/main.rs @@ -249,6 +249,15 @@ use insert_coin::TickTimerService; use insert_coin::{TickService, TickServiceData}; fn app_main(mut p: hal::Peripherals) { + // initialize ADC core first, and exit if battery is too low + let mut adc = hal::adc::Adc::new(p.ADC1, Default::default()); + let mut batt_monitor_pin = p.PD4; + let mut adc_core = AdcCore::new(adc, batt_monitor_pin); + let bv = adc_core.get_battery_voltage(); + if bv < 421 { + adc_core.shutdown(); + return; + } // === output setup === // LED0 output setup @@ -292,9 +301,9 @@ fn app_main(mut p: hal::Peripherals) { // === input setup === // adc - let mut adc = hal::adc::Adc::new(p.ADC1, Default::default()); - let mut batt_monitor_pin = p.PD4; - let adc_core = AdcCore::new(adc, batt_monitor_pin); + // let mut adc = hal::adc::Adc::new(p.ADC1, Default::default()); + // let mut batt_monitor_pin = p.PD4; + // let adc_core = AdcCore::new(adc, batt_monitor_pin); // adc2 // let mut usb_detect_dc = hal::adc::Adc::new(p.ADC1, Default::default()); @@ -555,8 +564,18 @@ fn shutdown_main(p: hal::Peripherals) { riscv::asm::delay(1_000_000); - unsafe { system::enter_standby() }; - riscv::asm::wfi(); + loop { + unsafe { system::enter_standby() }; + riscv::asm::wfi(); + unsafe { + #[allow(static_mut_refs)] + if (INPUT_FLAGS.sense_coin_flag.active() || INPUT_FLAGS.main_btn_flag.active()) + // && app.should_wake() + { + break; + } + } + } // loop { // unsafe {