geode-piano/vendor/mcp23017
2024-11-10 21:10:21 -05:00
..
.github perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00
docs perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00
src perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00
.gitignore perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00
Cargo.toml perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00
LICENSE perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00
README.md perf: don't read/write pin mode, write only 2024-11-10 21:10:21 -05:00

mcp23017

no_std driver for MCP23017 (16-Bit I2C I/O Expander with Serial Interface module)

Build Status crates.io Docs

Basic usage

Include this library as a dependency in your Cargo.toml:

[dependencies.mcp23017]
version = "<version>"

Use embedded-hal implementation to get I2C handle and then create mcp23017 handle:

extern crate mcp23017;

match mcp23017::MCP23017::default(i2c) {
    Ok(mut u) => {
        u.init_hardware();
        u.pin_mode(1, mcp23017::PinMode::OUTPUT);   // for the first pin
        u.all_pin_mode(mcp23017::PinMode::OUTPUT);  // or for all pins

        let status = u.read_gpioab().unwrap();
        println!("all {:#?}", status).unwrap();

        let read_a = u.read_gpio(mcp23017::Port::GPIOA).unwrap();
        println!("port a {:#?}", read_a).unwrap();

        match u.write_gpioab(65503){
            Ok(_) => {
                println!("ok").unwrap();
            }
            _ => {
                println!("something wrong").unwrap();
            }
        }
    }
    Err(mcp23017::MCP23017::Error::BusError(error)) => {
        println!("{:#?}", error).unwrap();;
        panic!();
    }
    _ => {
        panic!();
    }
};

Hardware address pins

Documentation

API Docs available on docs.rs

License

MIT license