-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlib.rs
52 lines (41 loc) · 1.52 KB
/
lib.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
50
51
52
extern crate linux_embedded_hal as hal;
extern crate hdc20xx;
extern crate opt300x;
extern crate bmp280;
extern crate i2cdev;
extern crate nb;
use i2cdev::sensors::{Barometer};
#[no_mangle]
pub extern "C" fn temperature() -> f32 {
let dev_i2c = hal::I2cdev::new("/dev/i2c-1").unwrap();
let hdc2010_addr = hdc20xx::SlaveAddr::default();
let mut hdc2010_sensor = hdc20xx::Hdc20xx::new(dev_i2c, hdc2010_addr);
let hdc2010_data = nb::block!(hdc2010_sensor.read()).unwrap();
return hdc2010_data.temperature;
}
#[no_mangle]
pub extern "C" fn humidity() -> f32 {
let dev_i2c = hal::I2cdev::new("/dev/i2c-1").unwrap();
let hdc2010_addr = hdc20xx::SlaveAddr::default();
let mut hdc2010_sensor = hdc20xx::Hdc20xx::new(dev_i2c, hdc2010_addr);
let hdc2010_data = nb::block!(hdc2010_sensor.read()).unwrap();
return hdc2010_data.humidity.unwrap();
}
#[no_mangle]
pub extern "C" fn light() -> f32 {
let dev_i2c = hal::I2cdev::new("/dev/i2c-1").unwrap();
let opt3002_addr = opt300x::SlaveAddr::Alternative(false, true);
let mut opt3002_sensor = opt300x::Opt300x::new_opt3002(dev_i2c, opt3002_addr);
let opt3002_data = nb::block!(opt3002_sensor.read_lux()).unwrap();
return opt3002_data.result;
}
#[no_mangle]
pub extern "C" fn pressure() -> f32 {
let mut dev = bmp280::Bmp280Builder::new()
.path("/dev/i2c-1".to_string())
.address(0x76)
.build()
.expect("Failed to build device");
dev.zero().expect("failed to zero");
return dev.pressure_kpa().unwrap();
}