#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_hal::{
prelude::*,
delay::Delay,
gpio::{Level, Output, Pin},
analog::adc::{Adc, AdcConfig, Attenuation}
};
use esp_println::{
print,
println
};
#[entry]
fn main() -> ! {
let peripherals = esp_hal::init(esp_hal::Config::default());
let s3 = Output::new(peripherals.GPIO19.degrade(), Level::Low);
let s2 = Output::new(peripherals.GPIO21.degrade(), Level::Low);
let s1 = Output::new(peripherals.GPIO22.degrade(), Level::Low);
let s0 = Output::new(peripherals.GPIO23.degrade(), Level::Low);
let mut mux_pins = [s0, s1, s2, s3];
let analog_pin = peripherals.GPIO34;
let mut adc1_config = AdcConfig::new();
let mut sig_pin = adc1_config.enable_pin(
analog_pin,
Attenuation::Attenuation11dB,
);
let mut adc1 = Adc::new(peripherals.ADC1, adc1_config);
let delay = Delay::new();
let mut values: [u16; 16] = [0; 16];
loop {
for channel in 0..16 {
let mut bin: [char; 4] = ['0'; 4];
for i in 0..4 {
if (channel >> i) & 1 == 1 {
bin[i] = '1';
let _ = mux_pins[i].set_high();
} else {
bin[i] = '0';
let _ = mux_pins[i].set_low();
}
}
for i in 0..4 {
print!("{}", bin[3-i]);
}
delay.delay_millis(10);
values[channel] = nb::block!(adc1.read_oneshot(&mut sig_pin)).unwrap();
println!(": {}", values[channel]);
delay.delay_millis(125);
}
for i in 0..15 {
print!("{},", values[i]);
}
println!("{}", values[15]);
delay.delay_millis(1000);
}
}
Loading
cd74hc4067
cd74hc4067