1
Fork 0

send bus voltage over pipe

This commit is contained in:
Andy Killorin 2025-02-08 20:13:47 -05:00
parent 6a285fe7cd
commit e4516bc804
Signed by: ank
GPG key ID: 23F9463ECB67FE8C

View file

@ -5,7 +5,7 @@ use core::{panic::PanicInfo, sync::atomic::Ordering};
use common::{Command, Response, SensorData, BAUDRATE}; use common::{Command, Response, SensorData, BAUDRATE};
use embassy_executor::Spawner; 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_sync::{blocking_mutex::raw::CriticalSectionRawMutex, channel::Channel, once_lock::OnceLock};
use embassy_time::{with_deadline, with_timeout, Duration, Instant, Timer}; use embassy_time::{with_deadline, with_timeout, Duration, Instant, Timer};
use embedded_io_async::{BufRead, Read, Write}; 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>; I2C1_IRQ => embassy_rp::i2c::InterruptHandler<embassy_rp::peripherals::I2C1>;
USBCTRL_IRQ => embassy_rp::usb::InterruptHandler<USB>; USBCTRL_IRQ => embassy_rp::usb::InterruptHandler<USB>;
UART1_IRQ => BufferedInterruptHandler<UART1>; UART1_IRQ => BufferedInterruptHandler<UART1>;
ADC_IRQ_FIFO => adc::InterruptHandler;
}); });
pub static COMMANDS: Channel<CriticalSectionRawMutex, Command, 5> = Channel::new(); pub static COMMANDS: Channel<CriticalSectionRawMutex, Command, 5> = Channel::new();
@ -57,6 +58,8 @@ async fn main(spawner: Spawner) {
let stopped = drive_conf.clone(); let stopped = drive_conf.clone();
let mut drive_pwm = Pwm::new_output_ab(p.PWM_SLICE0, p.PIN_16, p.PIN_17, stopped.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 config = embassy_rp::i2c::Config::default();
let bus = embassy_rp::i2c::I2c::new_async(p.I2C1, p.PIN_19, p.PIN_18, Irqs, config); 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 (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;
}
}