#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_hal::{
analog::adc::{Adc, AdcConfig, Attenuation},
delay::Delay,
gpio::{Level, Output, OutputConfig},
main,
};
use log::{info, warn};
use nb::block;
#[main]
fn main() -> ! {
let peripherals = esp_hal::init(esp_hal::Config::default());
esp_println::logger::init_logger_from_env();
let mut led = Output::new(peripherals.GPIO4, Level::High, OutputConfig::default());
// ADC
let analog_pin = peripherals.GPIO32;
let mut adc1_config = AdcConfig::new();
let mut pin = adc1_config.enable_pin(
analog_pin,
Attenuation::_11dB,
);
let mut adc1 = Adc::new(peripherals.ADC1, adc1_config);
// Delay
let delay = Delay::new();
info!("Iniciando...");
loop {
// Intentar leer el ADC
match block!(adc1.read_oneshot(&mut pin)) {
Ok(pin_value) => {
info!("Valor ADC: {}", pin_value);
// Si el valor es alto, encender LED, si es bajo, apagarlo
if pin_value > 2000 {
led.set_high();
} else {
led.set_low();
}
}
Err(e) => {
warn!("Error al leer el ADC: {:?}", e);
// Tomar una acción en caso de error, como encender un LED de error o reintentar
led.set_high(); // Por ejemplo, encender LED como indicador de falla
}
}
delay.delay_millis(500);
}
}