diff options
| author | obe1line <[email protected]> | 2025-07-23 12:40:48 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-23 12:40:48 +1000 |
| commit | eb15a555196050166acdf53db02f1d0fffbfb2be (patch) | |
| tree | 4bf95c120a4fbd84e5d55beca92bc0af05af99e8 /examples/mimxrt1011/src/bin/button.rs | |
| parent | e64c23076d2c003efe60419eab6b86630d7886b4 (diff) | |
| parent | 8f5e4ac06d1d06dd6520a8eecf8697b199005f34 (diff) | |
Merge branch 'embassy-rs:main' into obe1line-stm32c071
Diffstat (limited to 'examples/mimxrt1011/src/bin/button.rs')
| -rw-r--r-- | examples/mimxrt1011/src/bin/button.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/examples/mimxrt1011/src/bin/button.rs b/examples/mimxrt1011/src/bin/button.rs new file mode 100644 index 000000000..e63d7171d --- /dev/null +++ b/examples/mimxrt1011/src/bin/button.rs | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | //! This example works on the following boards: | ||
| 2 | //! - IMXRT1010-EVK | ||
| 3 | //! - Adafruit Metro M7 (with microSD or with AirLift), requires an external button | ||
| 4 | //! - Makerdiary iMX RT1011 Nano Kit (TODO: currently untested, please change this) | ||
| 5 | //! | ||
| 6 | //! Although beware you will need to change the GPIO pins being used (scroll down). | ||
| 7 | |||
| 8 | #![no_std] | ||
| 9 | #![no_main] | ||
| 10 | |||
| 11 | use defmt::info; | ||
| 12 | use embassy_executor::Spawner; | ||
| 13 | use embassy_nxp::gpio::{Input, Level, Output, Pull}; | ||
| 14 | // Must include `embassy_imxrt1011_examples` to ensure the FCB gets linked. | ||
| 15 | use {defmt_rtt as _, embassy_imxrt1011_examples as _, panic_probe as _}; | ||
| 16 | |||
| 17 | #[embassy_executor::main] | ||
| 18 | async fn main(_spawner: Spawner) -> ! { | ||
| 19 | let p = embassy_nxp::init(Default::default()); | ||
| 20 | info!("Hello world!"); | ||
| 21 | |||
| 22 | /* Pick the pins to use depending on your board. */ | ||
| 23 | |||
| 24 | // IMXRT1010-EVK | ||
| 25 | // | ||
| 26 | // LED (D25) and user button (SW4) | ||
| 27 | let (led, button) = (p.GPIO_11, p.GPIO_SD_05); | ||
| 28 | |||
| 29 | // Adafruit Metro M7 (both microSD and AirLift variants) | ||
| 30 | // | ||
| 31 | // The LED is connected to D13 on the board. | ||
| 32 | // | ||
| 33 | // In particular the Metro M7 has no board user buttons, so you will need to connect a button. | ||
| 34 | // Any other GPIO pin can be used. GPIO_04 is used for example since it is on pin D12. | ||
| 35 | // let (led, button) = (p.GPIO_03, p.GPIO_04); | ||
| 36 | |||
| 37 | // Makerdiary iMX RT1011 Nano Kit | ||
| 38 | // | ||
| 39 | // LED0 and user button. | ||
| 40 | // let (led, button) = (p.GPIO_SD_04, p.GPIO_SD_03); | ||
| 41 | |||
| 42 | let mut button = Input::new(button, Pull::Up100K); | ||
| 43 | let mut led = Output::new(led, Level::Low); | ||
| 44 | led.set_high(); | ||
| 45 | |||
| 46 | loop { | ||
| 47 | button.wait_for_falling_edge().await; | ||
| 48 | |||
| 49 | info!("Toggled"); | ||
| 50 | led.toggle(); | ||
| 51 | |||
| 52 | // The RT1010EVK has a 100 nF debouncing capacitor which results in false positive events | ||
| 53 | // when listening for a falling edge in a loop, wait for the rising edge and then wait for | ||
| 54 | // stabilization. | ||
| 55 | button.wait_for_rising_edge().await; | ||
| 56 | |||
| 57 | // Stabilization. | ||
| 58 | for _ in 0..100_000 { | ||
| 59 | cortex_m::asm::nop(); | ||
| 60 | } | ||
| 61 | } | ||
| 62 | } | ||
