Another suggestion, you can remove all the "return" key words of the button_pressed function (don't forget to remove also semicolon). It is more idiomatic Rust, but also less readable for the new comer.
fn buttonpressed(but: &PinDriver<', Gpio3, Input>, del: &u32) -> u32 { // Check if Button has been pressed // If not pressed, return the delay value unchanged if but.is_low() { // if the value of the delay passed is less of equal to 50 then reset it to initial value // else subtract 50 from the passed delay println!("Button Pressed!"); if del <= &50_u32 { 200_u32 } else { 50_u32 } } else { *del } }