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}