Crates.io | pca9535 |
lib.rs | pca9535 |
version | 2.0.0 |
source | src |
created_at | 2021-12-25 12:15:00.689552 |
updated_at | 2024-01-21 18:36:13.021649 |
description | PCA 9535 IO-Expander driver using embedded-hal |
homepage | |
repository | https://github.com/TeyKey1/pca9535 |
max_upload_size | |
id | 502961 |
size | 154,645 |
PCA9535 IO-Expander driver using embedded-hal.
Immediate mode issues an i2c bus transaction on each function call, behaving like a normal i2c device library does.
Cached mode takes advantage of the interrupt pin of the device, which indicates a change in the register value. The driver holds an internal representation of the device's registers; thus, it only issues a read if any data changed as indicated by the interrupt pin. This mode reduces read access on the bus significantly compared to immediate mode.
The standard interface offers all the needed functions to interact with the device's GPIO pins.
The HAL Pin Interface offers a way to use the Expander GPIO as embedded-hal GPIO, which makes it possible to use them in any other libraries using embedded-hal. The pins are usable across threads using an ExpanderMutex.
This is a basic usage example; for more information, visit the docs.
Immediate expander using standard interface:
use pca9535::{GPIOBank, Pca9535Immediate, StandardExpanderInterface};
let i2c = I2c::new().unwrap();
let mut expander = Pca9535Immediate::new(i2c, 32);
expander.pin_into_input(GPIOBank::Bank0, 4).unwrap();
expander.pin_into_output(GPIOBank::Bank1, 6).unwrap();
if expander.pin_is_high(GPIOBank::Bank0, 4).unwrap() {
expander.pin_set_high(GPIOBank::Bank1, 6).unwrap();
}
Cached expander using hal pin interface:
use std::sync::Mutex;
use embedded_hal::digital::blocking::{InputPin, OutputPin};
use pca9535::{ExpanderInputPin, ExpanderOutputPin, GPIOBank, IoExpander, Pca9535Cached, PinState};
let i2c = I2c::new().unwrap();
let interrupt_pin = Gpio::new().unwrap().get(1).unwrap().into_input();
let expander = Pca9535Cached::new(i2c, 32, interrupt_pin, true).unwrap();
let io_expander: IoExpander<_, _, Mutex<_>> = IoExpander::new(expander);
let mut input_pin = ExpanderInputPin::new(&io_expander, GPIOBank::Bank0, 4).unwrap();
let mut output_pin = ExpanderOutputPin::new(&io_expander, GPIOBank::Bank1, 6, PinState::Low).unwrap();
if input_pin.is_high().unwrap() {
output_pin.set_high().unwrap();
}
See CHANGELOG.md or release page for details.