rsiot/drivers_i2c/pca9555/
device.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use std::sync::Arc;
use std::time::Duration;

use tokio::{sync::Mutex, time::sleep};

use super::super::{I2cSlaveAddress, RsiotI2cDriverBase};

/// Опрос модуля PCA9555
pub struct PCA9555 {
    /// Адрес микросхемы
    pub address: I2cSlaveAddress,
}

impl PCA9555 {
    /// Запустить опрос устройства
    pub async fn spawn(&self, driver: Arc<Mutex<impl RsiotI2cDriverBase + 'static>>) {
        loop {
            let mut driver = driver.lock().await;

            // read ------------------
            let request = [0];
            let result = driver
                .write_read(self.address, &request, 2, Duration::from_secs(2))
                .await;
            println!("Result read: {:?}", result);

            // write -----------------

            // let request = [6, 0];
            // let result = driver.write(self.address, &request).await;
            // println!("Result 1: {:?}", result);

            // let request = [2, value];
            // value = if value == 0b11111111 { 0 } else { 0b11111111 };
            // let result = driver.write(self.address, &request).await;
            // println!("Result 2: {:?}", result);

            // let request = [2];
            // let result = driver.write_read(self.address, &request, 2).await;
            // println!("Result 3: {:?}", result);

            // let request = [6];
            // let result = driver.write_read(self.address, &request, 2).await;
            // println!("Result 4: {:?}", result);

            sleep(Duration::from_secs(2)).await
        }
    }
}