send bus voltage over pipe
This commit is contained in:
parent
6a285fe7cd
commit
e4516bc804
1 changed files with 16 additions and 1 deletions
|
@ -5,7 +5,7 @@ use core::{panic::PanicInfo, sync::atomic::Ordering};
|
|||
|
||||
use common::{Command, Response, SensorData, BAUDRATE};
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_rp::{bind_interrupts, block::ImageDef, gpio::{Level, Output}, peripherals::{UART0, UART1, USB}, pwm::{self, Pwm}, uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx, Config}, usb::Driver};
|
||||
use embassy_rp::{adc::{self, Adc}, bind_interrupts, block::ImageDef, gpio::{Level, Output, Pull}, peripherals::{ADC, PIN_28, UART0, UART1, USB}, pwm::{self, Pwm}, uart::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx, Config}, usb::Driver};
|
||||
use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, channel::Channel, once_lock::OnceLock};
|
||||
use embassy_time::{with_deadline, with_timeout, Duration, Instant, Timer};
|
||||
use embedded_io_async::{BufRead, Read, Write};
|
||||
|
@ -18,6 +18,7 @@ bind_interrupts!(struct Irqs {
|
|||
I2C1_IRQ => embassy_rp::i2c::InterruptHandler<embassy_rp::peripherals::I2C1>;
|
||||
USBCTRL_IRQ => embassy_rp::usb::InterruptHandler<USB>;
|
||||
UART1_IRQ => BufferedInterruptHandler<UART1>;
|
||||
ADC_IRQ_FIFO => adc::InterruptHandler;
|
||||
});
|
||||
|
||||
pub static COMMANDS: Channel<CriticalSectionRawMutex, Command, 5> = Channel::new();
|
||||
|
@ -57,6 +58,8 @@ async fn main(spawner: Spawner) {
|
|||
let stopped = drive_conf.clone();
|
||||
let mut drive_pwm = Pwm::new_output_ab(p.PWM_SLICE0, p.PIN_16, p.PIN_17, stopped.clone());
|
||||
|
||||
spawner.spawn(bus_voltage_monitor(p.ADC, p.PIN_28)).unwrap();
|
||||
|
||||
let config = embassy_rp::i2c::Config::default();
|
||||
let bus = embassy_rp::i2c::I2c::new_async(p.I2C1, p.PIN_19, p.PIN_18, Irqs, config);
|
||||
|
||||
|
@ -188,3 +191,15 @@ fn calc_speed(speed: f32) -> u16 {
|
|||
|
||||
(COUNTS_PER_MS * ms) as u16
|
||||
}
|
||||
|
||||
#[embassy_executor::task]
|
||||
async fn bus_voltage_monitor(adc: ADC, bus: PIN_28) {
|
||||
let mut adc = Adc::new(adc, Irqs, adc::Config::default());
|
||||
let mut bus_voltage = adc::Channel::new_pin(bus, Pull::None);
|
||||
|
||||
loop {
|
||||
let level = adc.read(&mut bus_voltage).await.unwrap();
|
||||
SENSOR_DATA.send(SensorData::BusVoltage(level as f32)).await;
|
||||
Timer::after_millis(3).await;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue