tof_control/rb_control/
rb_ph.rs

1use crate::constant::*;
2use crate::helper::rb_type::{RBPh, RBError};
3use crate::device::{bme280, pca9548a};
4
5impl RBPh {
6    pub fn new() -> Self {
7        match Self::read_ph() {
8            Ok(rb_ph) => {
9                rb_ph
10            }
11            Err(_) => {
12                Self {
13                    pressure: f32::MAX,
14                    humidity: f32::MAX,
15                }
16            }
17        }
18    }
19    pub fn read_ph() -> Result<RBPh, RBError> {
20        let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_1);
21
22        i2c_mux.select(RB_BME280_CHANNEL)?;
23        let bme280 = bme280::BME280::new(I2C_BUS, RB_BME280_ADDRESS);
24        bme280.configure()?;
25        let ph = bme280.read()?;
26        let pressure = ph[0];
27        let humidity = ph[1];
28
29        i2c_mux.reset()?;
30
31        Ok(
32            RBPh {
33                pressure,
34                humidity,
35            }
36        )
37    }
38}
39
40pub fn config_ph() -> Result<(), RBError> {
41    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_1);
42    i2c_mux.select(RB_BME280_CHANNEL)?;
43    let bme280 = bme280::BME280::new(I2C_BUS, RB_BME280_ADDRESS);
44    bme280.configure()?;
45
46    i2c_mux.reset()?;
47
48    Ok(())
49}