Skip to content

Commit 271e091

Browse files
committed
Refactor heart sensing task to use LED3 and simplify sample data processing
1 parent 1def675 commit 271e091

File tree

2 files changed

+30
-38
lines changed

2 files changed

+30
-38
lines changed

src/main.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,15 @@ fn heart_sensing_task(
259259

260260
// Fs = 25 Hz
261261
let mut heart = heart
262-
.into_heart_rate()
262+
.into_multi_led()
263+
.map_err(|_| anyhow!("Heartbeat I2C disconnected"))?;
264+
heart
265+
.set_led_time_slots([
266+
max3010x::TimeSlot::Led3,
267+
max3010x::TimeSlot::Disabled,
268+
max3010x::TimeSlot::Disabled,
269+
max3010x::TimeSlot::Disabled,
270+
])
263271
.map_err(|_| anyhow!("Heartbeat I2C disconnected"))?;
264272
heart
265273
.set_sample_averaging(max3010x::SampleAveraging::Sa16)
@@ -268,7 +276,7 @@ fn heart_sensing_task(
268276
.set_sampling_rate(max3010x::SamplingRate::Sps800)
269277
.map_err(|_| anyhow!("Heartbeat I2C disconnected"))?;
270278
heart
271-
.set_pulse_amplitude(max3010x::Led::Led1, led_amplitude)
279+
.set_pulse_amplitude(max3010x::Led::Led3, led_amplitude)
272280
.map_err(|_| anyhow!("Heartbeat I2C disconnected"))?;
273281
heart
274282
.set_pulse_width(max3010x::LedPulseWidth::Pw411)

src/pulse_sensor.rs

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ use crate::{
1010
pub const MAX30102_NUM_SAMPLES: usize = 100;
1111
pub const MAX30102_SAMPLE_RATE: Hertz = Hertz(25);
1212

13-
// const FIR_COEFFS: [u16; 12] = [
14-
// 172, 321, 579, 927, 1360, 1858, 2390, 2916, 3391, 3768, 4012, 4096,
15-
// ];
16-
1713
pub struct Max3012SampleData {
1814
/// "AC" component of R/IR signal sample
1915
/// (sensor value - DC mean subtracted)
@@ -56,30 +52,26 @@ impl Max3012SampleData {
5652
}
5753

5854
pub fn update_from_samples(&mut self, data: impl Iterator<Item = f32>) {
59-
self.data_to_skip = data
60-
.enumerate()
61-
.fold((0, None::<f32>), |(res, prev), (i, x)| {
62-
self.ac[i] = x;
63-
if let Some(prev) = prev {
64-
if (x - prev).abs() > 100_000.0 {
65-
(i + 1, None)
66-
} else {
67-
(res, Some(x))
68-
}
69-
} else {
70-
(res, Some(x))
71-
}
72-
})
73-
.0;
74-
75-
self.data_to_skip = min(
76-
if self.data_to_skip > 0 {
77-
self.data_to_skip + 50
78-
} else {
79-
self.data_to_skip
80-
},
81-
MAX30102_NUM_SAMPLES,
82-
);
55+
// self.data_to_skip = data
56+
// .enumerate()
57+
// .fold((0, None::<f32>), |(res, prev), (i, x)| {
58+
// self.ac[i] = x;
59+
// if let Some(prev) = prev {
60+
// if (x - prev).abs() > 100_000.0 {
61+
// (i + 1, Some(prev))
62+
// } else {
63+
// (res, Some(x))
64+
// }
65+
// } else {
66+
// (res, Some(x))
67+
// }
68+
// })
69+
// .0;
70+
71+
// self.data_to_skip = 0;
72+
for (i, x) in data.enumerate() {
73+
self.ac[i] = x;
74+
}
8375
}
8476

8577
pub fn process_signal(&mut self) {
@@ -134,12 +126,4 @@ impl Max3012SampleData {
134126
}
135127
}
136128
}
137-
138-
// fn low_pass_FIR_filter(&mut self, data: &[f32], filter: &[f32]) -> f32 {
139-
// let mut result = 0.0;
140-
// for (i, &f) in filter.iter().enumerate() {
141-
// result += f * data[i];
142-
// }
143-
// result
144-
// }
145129
}

0 commit comments

Comments
 (0)