Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • cats/mobile-transceiver-software
  • Reed/mobile-transceiver-software
  • xanarin/mobile-transceiver-software
3 results
Select Git revision
Show changes
Commits on Source (1)
...@@ -21,6 +21,9 @@ pub type MyInstant = Instant<u64, 1, { SYS_TICK_FREQ }>; ...@@ -21,6 +21,9 @@ pub type MyInstant = Instant<u64, 1, { SYS_TICK_FREQ }>;
#[rtic::app(device = stm32f4xx_hal::pac, peripherals = true, dispatchers = [USART1, USART6])] #[rtic::app(device = stm32f4xx_hal::pac, peripherals = true, dispatchers = [USART1, USART6])]
mod app { mod app {
use core::fmt::Write;
use arrayvec::ArrayString;
use cortex_m::singleton; use cortex_m::singleton;
use hal::{ use hal::{
adc::{config::AdcConfig, Adc}, adc::{config::AdcConfig, Adc},
...@@ -129,8 +132,18 @@ mod app { ...@@ -129,8 +132,18 @@ mod app {
// setup volt meter // setup volt meter
let volt_pin = gpioc.pc0.into_analog(); let volt_pin = gpioc.pc0.into_analog();
let sensor1 = gpioc.pc2.into_analog();
let sensor2 = gpioc.pc3.into_analog();
let sensor3 = gpioc.pc4.into_analog();
let volt_adc = Adc::adc1(dp.ADC1, true, AdcConfig::default()); let volt_adc = Adc::adc1(dp.ADC1, true, AdcConfig::default());
let mut volt_meter = VoltMeter::new(volt_pin, volt_adc, config.min_voltage.into()); let mut volt_meter = VoltMeter::new(
volt_pin,
sensor1,
sensor2,
sensor3,
volt_adc,
config.min_voltage.into(),
);
// Detect if we're connected to USB or not // Detect if we're connected to USB or not
let usb_detect = gpioa.pa5.into_pull_down_input(); let usb_detect = gpioa.pa5.into_pull_down_input();
...@@ -306,7 +319,10 @@ mod app { ...@@ -306,7 +319,10 @@ mod app {
let mut buf = [0; MAX_PACKET_LEN]; let mut buf = [0; MAX_PACKET_LEN];
let mut cats = Packet::new(&mut buf); let mut cats = Packet::new(&mut buf);
let voltage = ctx.shared.volt_meter.lock(|vm| vm.voltage()); let (sensors, voltage) = ctx
.shared
.volt_meter
.lock(|vm| (vm.sensors(), vm.voltage()));
let temp = ctx let temp = ctx
.shared .shared
.radio .radio
...@@ -332,6 +348,8 @@ mod app { ...@@ -332,6 +348,8 @@ mod app {
.unwrap(); .unwrap();
if !config.comment.is_empty() { if !config.comment.is_empty() {
let mut buf: ArrayString<64> = ArrayString::new();
write!(&mut buf, "{} {} {}", sensors[0], sensors[1], sensors[2]).unwrap();
cats.add_comment(&config.comment).unwrap(); cats.add_comment(&config.comment).unwrap();
} }
......
...@@ -256,6 +256,16 @@ impl Shell { ...@@ -256,6 +256,16 @@ impl Shell {
write!(ushell, "\r\n{volts:.2} V\r\n").ok(); write!(ushell, "\r\n{volts:.2} V\r\n").ok();
} }
"sensors" => {
let sensors = volt_meter.lock(|vm| vm.sensors());
write!(
ushell,
"\r\nS1: {} mV\r\nS2: {} mV\r\nS3: {} mV\r\n",
sensors[0], sensors[1], sensors[2]
)
.ok();
}
"help" => { "help" => {
write!(ushell, "{}", HELP_TEXT).ok(); write!(ushell, "{}", HELP_TEXT).ok();
} }
......
...@@ -8,20 +8,49 @@ const FACTOR: f64 = 1.0 / 0.0757856; ...@@ -8,20 +8,49 @@ const FACTOR: f64 = 1.0 / 0.0757856;
pub struct VoltMeter { pub struct VoltMeter {
pin: Pin<'C', 0, Analog>, pin: Pin<'C', 0, Analog>,
sensor1: Pin<'C', 2, Analog>,
sensor2: Pin<'C', 3, Analog>,
sensor3: Pin<'C', 4, Analog>,
adc: Adc<ADC1>, adc: Adc<ADC1>,
threshold: Option<f32>, threshold: Option<f32>,
} }
impl VoltMeter { impl VoltMeter {
pub fn new(pin: Pin<'C', 0, Analog>, mut adc: Adc<ADC1>, threshold: Option<f32>) -> Self { pub fn new(
pin: Pin<'C', 0, Analog>,
sensor1: Pin<'C', 2, Analog>,
sensor2: Pin<'C', 3, Analog>,
sensor3: Pin<'C', 4, Analog>,
mut adc: Adc<ADC1>,
threshold: Option<f32>,
) -> Self {
adc.calibrate(); adc.calibrate();
Self { Self {
pin, pin,
sensor1,
sensor2,
sensor3,
adc, adc,
threshold, threshold,
} }
} }
pub fn sensors(&mut self) -> [u16; 3] {
let samples = [
self.adc.convert(&self.sensor1, SampleTime::Cycles_480),
self.adc.convert(&self.sensor2, SampleTime::Cycles_480),
self.adc.convert(&self.sensor3, SampleTime::Cycles_480),
];
let mut out = [0; 3];
for (i, s) in samples.iter().enumerate() {
out[i] = self.adc.sample_to_millivolts(*s);
}
out
}
pub fn voltage(&mut self) -> f64 { pub fn voltage(&mut self) -> f64 {
let sample = self.adc.convert(&self.pin, SampleTime::Cycles_480); let sample = self.adc.convert(&self.pin, SampleTime::Cycles_480);
let mv = self.adc.sample_to_millivolts(sample); let mv = self.adc.sample_to_millivolts(sample);
......