summaryrefslogtreecommitdiffstats
path: root/README.md
blob: b029a9f05fa8d2eb0f7c4f730adeaecba2974838 (plain)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# adxl345_driver2

This is a hardware driver for [ADXL345] and [ADXL346] type 3-Axis
Digital Accelerometers written in [Rust] using [embedded-hal] `I2c` and `Spi` traits.
That means it runs on all hardware layers that implement the [embedded-hal] traits.

Although the name says adxl345 the driver should also work with the [ADXL346]
device as well since the only difference between them is the physical packaging
and not the internal workings.

This crate is a fork of the adxl345_driver crate.
This crate still is API compatible with the original adxl345_driver crate.

## Getting Started

You will need to have a recent version of [Rust] installed.

This crate supports all hardware abstraction layers that implement the
[embedded-hal] `I2c` and `Spi` traits. That includes the [rppal] driver for
the Raspberry Pi. But it is not restricted to that platform. Platforms
that are known to work correctly are the Raspberry Pi with [rppal] and the
ESP32 with [esp-idf-hal]. But this crate is not restricted to these HAL layers.

### Using The Crate

You can use `cargo add` to add the driver to your `Cargo.toml`

```sh
cargo add adxl345_driver2
```

or you can manually add the driver to your `Cargo.toml`:

```toml
[dependencies]
adxl345_driver2 = "1"
```

## Examples

You will find examples in the `examples` directory.
The Raspberry Pi I²C and SPI examples are available.

To build the I²C example start by clone this project somewhere on your Raspberry
Pi:

```sh
git clone https://git.bues.ch/git/adxl345_driver2
```

Next execute the follow to build the example:

```sh
cd adxl345_driver2
cargo build --example rppal-i2c
```

And finally execute the example:

```sh
sudo ./target/debug/examples/rppal-i2c
```

You should see the series of x, y, z values displayed in the terminal if your
device has been hooked up using the primary I²C that the example expects.

Output example:

```console
axis: {'x': 1.6083, 'y': 0.0392, 'z': 8.7868} m/s²
axis: {'x': 1.6867, 'y': 0.1177, 'z': 8.7868} m/s²
axis: {'x': 1.6475, 'y': 0.1177, 'z': 8.8260} m/s²
...
```

## no_std

This crate can be used in `no_std` environments.
Just enable the `no_std` feature, if you want to build without `std` library.

`no_std` currently only disables the implementation of `std::error::Error` for `AdxlError`.

```toml
[dependencies]
adxl345_driver2 = { version = "1", features = ["no_std"] }
```

## TODO

- Most of the driver is currently implemented as `provided` methods in a chain of traits.
  That is more complicated than it needs to be.
  And it also exposes the low level bus access routines to the user API.
  It would be better to have two trait based low level bus access structs for I²C and SPI
  and then implement a driver struct that is generic over this trait.
  The problem with this change is that it is a user visible API change.
  Therefore, we'll keep the old implementation for now.

## Licenses

All code files are available under the `MIT` license.
You can find a copy of the license in the `LICENSE` file.

All additional documentation like this `README` is licensed under a
[CC-BY-SA / Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/).

[Rust]: https://www.rust-lang.org/
[embedded-hal]: https://crates.io/crates/embedded-hal
[ADXL345]: https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf
[ADXL346]: https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL346.pdf
bues.ch cgit interface