mirror of
https://github.com/esp-rs/esp-idf-hal.git
synced 2025-09-28 04:41:02 +00:00

* Continuous mode ADC * GPIO: Switch to the common notification; remove alloc req for async * (WIP) async SPI * Notification callbacks in async SPI * SPI: Lower the code repetition * Fix the build * I2S pre-async simplification * Async methods for I2S * SPI: Wait for the transaction to complete on drop * More flexibility in PinDriver::wait_for * Remove the gargantuan mutex for now * Arrays supported as ADC channels * Fix timeouts * ADC: measurement shape * Fix the dependencies * Fix CI * ADC: cont config * ADC: better atten API; fix delays * ADC: Raw handle access * I2S: Make config more symmetric with the other drivers * I2S: Remove unnecessary generics * Improve the semantics of read/write vrt partial r/w * Review feedback * Clippy * Shorten static array initializers * Do not glob-import all of esp-idf-sys * SPI: make notifications non-static * SPI: Remove the async fetch() hack; extend async support * Fix the CI * SPI: Restore WriteIter impl * Bugfix: tx/rx handles mismatch * I2S: Utility methods to write the whole buffer * I2S Bugfix: wrong translation to native format * More ergonomic API for TickType * unsubscribe during reset will fail if ISR service is not enabled yet * Typo * Same defaults * No need for unsafe here Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com> * Assert that ESP_ERR_TIMEOUT should never happen * Safe variant of completion * ADC: wrong timeout conversion * Proof of posession of i2s0/spi3 for esp32/esp32s2 * write_async only available on ESP IDF 5+ * Option to transmute the adc buffer to pcm * ADC: only expose PCM conversion where it is possible (esp32/esp32s2) * ADC: Fix channel chaining * ADC: fix the CI * ADC: Nullify everything * ADC: as_pcm32 for riscv and esp32s3 * ADC: as_pcm32 for riscv and esp32s3 * ADC: read_raw * I2S: Proper driver shutdown * ADC: Fix clippy and compile errors on ESP-IDF 4 * Compat with ESP-IDF master --------- Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com>
38 lines
1.4 KiB
Rust
38 lines
1.4 KiB
Rust
//! ADC example, reading a value form a pin and printing it on the terminal
|
|
//!
|
|
|
|
use esp_idf_sys::{self as _}; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
|
|
|
|
use std::thread;
|
|
use std::time::Duration;
|
|
|
|
use esp_idf_hal::adc::config::Config;
|
|
use esp_idf_hal::adc::*;
|
|
use esp_idf_hal::peripherals::Peripherals;
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let peripherals = Peripherals::take().unwrap();
|
|
|
|
#[cfg(not(esp32))]
|
|
let mut adc = AdcDriver::new(peripherals.adc1, &Config::new().calibration(true))?;
|
|
|
|
#[cfg(esp32)]
|
|
let mut adc = AdcDriver::new(peripherals.adc2, &Config::new().calibration(true))?;
|
|
|
|
// configuring pin to analog read, you can regulate the adc input voltage range depending on your need
|
|
// for this example we use the attenuation of 11db which sets the input voltage range to around 0-3.6V
|
|
#[cfg(not(esp32))]
|
|
let mut adc_pin: esp_idf_hal::adc::AdcChannelDriver<{ attenuation::DB_11 }, _> =
|
|
AdcChannelDriver::new(peripherals.pins.gpio4)?;
|
|
|
|
#[cfg(esp32)]
|
|
let mut adc_pin: esp_idf_hal::adc::AdcChannelDriver<{ attenuation::DB_11 }, _> =
|
|
AdcChannelDriver::new(peripherals.pins.gpio12)?;
|
|
|
|
loop {
|
|
// you can change the sleep duration depending on how often you want to sample
|
|
thread::sleep(Duration::from_millis(10));
|
|
println!("ADC value: {}", adc.read(&mut adc_pin).unwrap());
|
|
}
|
|
}
|