diff options
| author | pennae <[email protected]> | 2023-07-05 20:05:34 +0200 |
|---|---|---|
| committer | pennae <[email protected]> | 2023-07-07 17:46:35 +0200 |
| commit | 972cdd4265b24efb101c6b9df373466fcbccac5d (patch) | |
| tree | bce7704ef8990d5e9032e0db88235aa062e0f619 /examples/rp/src | |
| parent | 46a46009520036cc4b4dd52e7e3bdc5191b67ea0 (diff) | |
rp/adc: rewrite the module
- don't require an irq binding for blocking-only adc
- abstract adc pins into an AnyPin like interface, erasing the actual
peripheral type at runtime.
- add pull-up/pull-down functions for adc pins
- add a test (mostly a copy of the example, to be honest)
- configure adc pads according to datasheet
- report conversion errors (although they seem exceedingly rare?)
- drop embedded-hal interfaces. embedded-hal channels can do neither
AnyPin nor pullup/pulldown without encoding both into the type
Diffstat (limited to 'examples/rp/src')
| -rw-r--r-- | examples/rp/src/bin/adc.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/examples/rp/src/bin/adc.rs b/examples/rp/src/bin/adc.rs index 7c2ca19f7..65069cde1 100644 --- a/examples/rp/src/bin/adc.rs +++ b/examples/rp/src/bin/adc.rs | |||
| @@ -4,8 +4,9 @@ | |||
| 4 | 4 | ||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_rp::adc::{Adc, Config, InterruptHandler}; | 7 | use embassy_rp::adc::{Adc, Config, InterruptHandler, Pin}; |
| 8 | use embassy_rp::bind_interrupts; | 8 | use embassy_rp::bind_interrupts; |
| 9 | use embassy_rp::gpio::Pull; | ||
| 9 | use embassy_time::{Duration, Timer}; | 10 | use embassy_time::{Duration, Timer}; |
| 10 | use {defmt_rtt as _, panic_probe as _}; | 11 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 12 | ||
| @@ -18,18 +19,18 @@ async fn main(_spawner: Spawner) { | |||
| 18 | let p = embassy_rp::init(Default::default()); | 19 | let p = embassy_rp::init(Default::default()); |
| 19 | let mut adc = Adc::new(p.ADC, Irqs, Config::default()); | 20 | let mut adc = Adc::new(p.ADC, Irqs, Config::default()); |
| 20 | 21 | ||
| 21 | let mut p26 = p.PIN_26; | 22 | let mut p26 = Pin::new(p.PIN_26, Pull::None); |
| 22 | let mut p27 = p.PIN_27; | 23 | let mut p27 = Pin::new(p.PIN_27, Pull::None); |
| 23 | let mut p28 = p.PIN_28; | 24 | let mut p28 = Pin::new(p.PIN_28, Pull::None); |
| 24 | 25 | ||
| 25 | loop { | 26 | loop { |
| 26 | let level = adc.read(&mut p26).await; | 27 | let level = adc.read(&mut p26).await.unwrap(); |
| 27 | info!("Pin 26 ADC: {}", level); | 28 | info!("Pin 26 ADC: {}", level); |
| 28 | let level = adc.read(&mut p27).await; | 29 | let level = adc.read(&mut p27).await.unwrap(); |
| 29 | info!("Pin 27 ADC: {}", level); | 30 | info!("Pin 27 ADC: {}", level); |
| 30 | let level = adc.read(&mut p28).await; | 31 | let level = adc.read(&mut p28).await.unwrap(); |
| 31 | info!("Pin 28 ADC: {}", level); | 32 | info!("Pin 28 ADC: {}", level); |
| 32 | let temp = adc.read_temperature().await; | 33 | let temp = adc.read_temperature().await.unwrap(); |
| 33 | info!("Temp: {} degrees", convert_to_celsius(temp)); | 34 | info!("Temp: {} degrees", convert_to_celsius(temp)); |
| 34 | Timer::after(Duration::from_secs(1)).await; | 35 | Timer::after(Duration::from_secs(1)).await; |
| 35 | } | 36 | } |
