# OneShot in embedded_hal::adc - Rust
ADCs that sample on single channels per request, and do so at the time of the request.
Keywords: rust, rustlang, rust-lang, OneShot

# Trait embedded_hal::adc::OneShot

source · [−]

    pub trait OneShot<ADC, Word, Pin: Channel<ADC>> {
        type Error;
        fn try_read(&mut self, pin: &mut Pin) -> Result<Word, Self::Error>;
    }

Expand description

ADCs that sample on single channels per request, and do so at the time of the request.

This trait is the interface to an ADC that is configured to read a specific channel at the time of the request (in contrast to continuous asynchronous sampling).

    use embedded_hal::adc::{Channel, OneShot};

    struct MyAdc; // 10-bit ADC, with 5 channels

    impl<WORD, PIN> OneShot<MyAdc, WORD, PIN> for MyAdc
    where
       WORD: From<u16>,
       PIN: Channel<MyAdc, ID=u8>,
    {
       type Error = ();

       fn try_read(&mut self, _pin: &mut PIN) -> nb::Result<WORD, Self::Error> {
           let chan = 1 << PIN::CHANNEL;
           self.power_up();
           let result = self.do_conversion(chan);
           self.power_down();
           Ok(result.into())
       }
    }

## Associated Types

source

#### type Error

Error type returned by ADC methods

## Required methods

source

#### fn try_read(&mut self, pin: &mut Pin) -> Result<Word, Self::Error>

Request that the ADC begin a conversion on the specified pin

This method takes a `Pin` reference, as it is expected that the ADC will be able to sample whatever channel underlies the pin.

## Implementors