rsiot/drivers_i2c/pca9555/
device.rs

1use std::sync::Arc;
2use std::time::Duration;
3
4use tokio::{sync::Mutex, time::sleep};
5
6use super::super::{I2cSlaveAddress, RsiotI2cDriverBase};
7
8/// Опрос модуля PCA9555
9pub struct PCA9555 {
10    /// Адрес микросхемы
11    pub address: I2cSlaveAddress,
12}
13
14impl PCA9555 {
15    /// Запустить опрос устройства
16    pub async fn spawn(&self, driver: Arc<Mutex<impl RsiotI2cDriverBase + 'static>>) {
17        loop {
18            let mut driver = driver.lock().await;
19
20            // read ------------------
21            let request = [0];
22            let result = driver
23                .write_read(self.address, &request, 2, Duration::from_secs(2))
24                .await;
25            println!("Result read: {:?}", result);
26
27            // write -----------------
28
29            // let request = [6, 0];
30            // let result = driver.write(self.address, &request).await;
31            // println!("Result 1: {:?}", result);
32
33            // let request = [2, value];
34            // value = if value == 0b11111111 { 0 } else { 0b11111111 };
35            // let result = driver.write(self.address, &request).await;
36            // println!("Result 2: {:?}", result);
37
38            // let request = [2];
39            // let result = driver.write_read(self.address, &request, 2).await;
40            // println!("Result 3: {:?}", result);
41
42            // let request = [6];
43            // let result = driver.write_read(self.address, &request, 2).await;
44            // println!("Result 4: {:?}", result);
45
46            sleep(Duration::from_secs(2)).await
47        }
48    }
49}