#[entry] fn main() -> ! { if let Some(mut p) = pac::Peripherals::take() { if let Some(cp) = Peripherals::take() { let button = cortex_m::interrupt::free(|cs| gpioa.pa2.into_pull_up_input(cs)); let mut x = cortex_m::interrupt::free(|cs| gpioa.pa3.into_analog(cs)); let mut y = cortex_m::interrupt::free(|cs| gpioa.pa1.into_analog(cs)); let mut adc = Adc::new(p.ADC, &mut rcc); let mut log_counter = 0u64; let mut low_since: Option = None; loop { let is_low = button.is_low().unwrap(); if is_low && low_since.is_none() { low_since.replace(log_counter); } else if !is_low { low_since.take(); } if let Some(low_since2) = low_since { if low_since2.abs_diff(log_counter) >= 1_000 { low_since.take(); // do something } else { //defmt::println!("low since not big enough: {}", low); } } log_counter = log_counter.wrapping_add(1); if log_counter % 500 == 0 { // do something else } } } } loop {} }