Skip to content

Commit 58558d1

Browse files
committed
Add example with multiple devices on the same bus
> cargo build --examples && sudo ./target/debug/examples/linux-shared Signed-off-by: Daniel Schaefer <dhs@frame.work>
1 parent 2281c4d commit 58558d1

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pastey = "0.2"
1717

1818
# For the example
1919
[dev-dependencies]
20+
embedded-hal-bus = "0.3.0"
2021
linux-embedded-hal = "0.4.1"
2122

2223
[dependencies.packed_struct]

examples/linux-shared.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use embedded_hal_bus::i2c::RefCellDevice;
2+
use linux_embedded_hal::I2cdev;
3+
use pac194x::{AddrSelect, PAC194X};
4+
use std::cell::RefCell;
5+
use std::{thread, time::Duration};
6+
7+
const SENSE_RESISTOR: f32 = 0.5;
8+
9+
fn main() {
10+
let i2c = RefCell::new(I2cdev::new("/dev/i2c-3").unwrap());
11+
12+
let bus_handle1 = RefCellDevice::new(&i2c);
13+
let mut sensor1 = PAC194X::new(bus_handle1, AddrSelect::GND).unwrap();
14+
15+
let bus_handle2 = RefCellDevice::new(&i2c);
16+
let mut sensor2 = PAC194X::new(bus_handle2, AddrSelect::_499).unwrap();
17+
18+
loop {
19+
for channel in 1..5 {
20+
let bus_voltage = sensor1.read_bus_voltage_n(channel).unwrap();
21+
let sense_voltage = sensor1.read_sense_voltage_n(channel).unwrap();
22+
print!(
23+
"Sensor 1 CH{} {:.2}V, {:.2}A, ",
24+
channel,
25+
bus_voltage,
26+
sense_voltage / SENSE_RESISTOR
27+
);
28+
}
29+
println!();
30+
for channel in 1..5 {
31+
let bus_voltage = sensor2.read_bus_voltage_n(channel).unwrap();
32+
let sense_voltage = sensor2.read_sense_voltage_n(channel).unwrap();
33+
print!(
34+
"Sensor 2 CH{} {:.2}V, {:.2}A, ",
35+
channel,
36+
bus_voltage,
37+
sense_voltage / SENSE_RESISTOR
38+
);
39+
}
40+
println!();
41+
println!();
42+
sensor1.refresh().unwrap();
43+
sensor1.refresh_v().unwrap();
44+
sensor2.refresh().unwrap();
45+
sensor2.refresh_v().unwrap();
46+
47+
thread::sleep(Duration::from_millis(100));
48+
}
49+
}

0 commit comments

Comments
 (0)