rustteensy

How do you use a teensy 4 pin via the teensy4-bsp Rust crate as an input with the pull-up resistor enabled?


I am trying to figure out how to do the Rust equivalent of

pinMode(PIN_D7, INPUT_PULLUP); // Pushbutton

(from https://www.pjrc.com/teensy/td_digital.html)

I have created a project using the template https://github.com/mciantyre/teensy4-rs-template as outlined in the Getting Started section of https://github.com/mciantyre/teensy4-rs .

Unfortunately, the Rust arduino code is a rabbit hole that IntelliJ IDEA can not fully navigate (they use macros to generate structs and impls), so I do not get any helpful completion results that would help me figure out what methods and fields are available.

I'm not sure what to do with pins.p7 to activate the pull-up resistor, or even sample it. Chasing the docs from p7 to P7 to B1_01 to Pad leaves me still confused.


Solution

  • Based on the response to https://github.com/mciantyre/teensy4-rs/issues/107 and the code at https://github.com/imxrt-rs/imxrt-hal/issues/112 I was able to create the following example that seems to work on my teensy 4.0

    let cfg = Config::zero()
        .set_hysteresis(Hysteresis::Enabled)
        .set_pull_keep(PullKeep::Enabled)
        .set_pull_keep_select(PullKeepSelect::Pull)
        .set_pullupdown(PullUpDown::Pulldown100k);
    iomuxc::configure(&mut switch_pin, cfg);
    
    let switch_gpio = GPIO::new(switch_pin);
    
    loop {
        if switch_gpio.is_set() {
            led.toggle()
        }
        systick.delay(LED_PERIOD_MS);
    }
    

    Full code at https://github.com/mciantyre/teensy4-rs/blob/997d92cc880185f22272d1cfd54de54732154bb5/examples/pull_down_pin.rs .