[][src]Trait nrf52832_hal::prelude::_embedded_hal_timer_CountDown

pub trait _embedded_hal_timer_CountDown {
type Time;
    fn start<T>(&mut self, count: T)
    where
        T: Into<Self::Time>
;
fn wait(&mut self) -> Result<(), Error<Void>>; }

A count down timer

Contract

  • self.start(count); block!(self.wait()); MUST block for AT LEAST the time specified by count.

Note that the implementer doesn't necessarily have to be a downcounting timer; it could also be an upcounting timer as long as the above contract is upheld.

Examples

You can use this timer to create delays

extern crate embedded_hal as hal;
#[macro_use(block)]
extern crate nb;

use hal::prelude::*;

fn main() {
    let mut led: Led = {
        // ..
    };
    let mut timer: Timer6 = {
        // ..
    };

    Led.on();
    timer.start(1.s());
    block!(timer.wait()); // blocks for 1 second
    Led.off();
}

Associated Types

type Time

The unit of time used by this timer

Loading content...

Required methods

fn start<T>(&mut self, count: T) where
    T: Into<Self::Time>, 

Starts a new count down

fn wait(&mut self) -> Result<(), Error<Void>>

Non-blockingly "waits" until the count down finishes

Contract

  • If Self: Periodic, the timer will start a new count down right after the last one finishes.
  • Otherwise the behavior of calling wait after the last call returned Ok is UNSPECIFIED. Implementers are suggested to panic on this scenario to signal a programmer error.
Loading content...

Implementors

impl<T> CountDown for Timer<T> where
    T: TimerExt
[src]

type Time = u32

fn start<Time>(&mut self, cycles: Time) where
    Time: Into<<Timer<T> as CountDown>::Time>, 
[src]

Start the timer

The timer will run for the given number of cycles, then it will stop and reset.

fn wait(&mut self) -> Result<(), Error<Void>>[src]

Wait for the timer to stop

Will return Err(nb::Error::WouldBlock) while the timer is still running. Once the timer reached the number of cycles given in the start method, it will return Ok(()).

To block until the timer has stopped, use the block! macro from the nb crate. Please refer to the documentation of nb for other options.

Loading content...