Raspberry Pi Waveshare OLED (SH1106) HAT Driver Written in Rust

Device (Front) | Device (Back) | Device (Powered) :-------------------------:|:-------------------------:|:------------------------:| | |

Device: https://www.waveshare.com/wiki/1.3inchOLEDHAT

Usage

bash cargo add ws-oled-driver -- or --

toml [dependencies] ws-oled-driver = "0.0.4"

Cross Compiling for Raspberry Pi Zero

bash cargo build --target arm-unknown-linux-gnueabihf --release

Examples

Display

NOTE: THE ws_oled_driver::gfx library is a work in progress. Since there is direct access available to the Display { memory: Vec<u8> } field, which is the display buffer, you may directly modify the buffer to create visuals and use the display.render()? function to render it to the display.

```rust use wsoleddriver::Device; /* HAT Device / use ws_oled_driver::gfx; / Graphics */ use anyhow::Result;

fn main() -> Result<()> { let mut device = Device::new()?; device.initialize_components()?;

/* FILL DISPLAY */ gfx::fill(&mut device.display, 0xFF); device.display.render()?;

Ok(()) } ```

Joystick

```rust use anyhow::Result; use wsoleddriver::joystick; use wsoleddriver::Device; /* HAT Device */

fn main() -> Result<()> { let mut device = Device::new()?; device.initialize_components()?;

loop {
    if let Some(joystick_state) = device.joystick.read() {
        match joystick_state {
            joystick::State::Up => {
                println!("You Pressed Up");
            }
            joystick::State::Down => {
                println!("You Pressed Down");
            }
            joystick::State::Left => {
                println!("You Pressed Left");
            }
            joystick::State::Right => {
                println!("You Pressed Right");
            }
            joystick::State::Click => {
                println!("You Clicked!");
            }
        }
    }
}

}

```

Buttons

```rust use wsoleddriver::Device; /* HAT Device */ use wsoleddriver::button::State; use anyhow::Result;

fn main() -> Result<()> { let mut device = Device::new()?; device.initialize_components()?;

loop { if let Some(buttonstate) = device.buttoncontroller.read() { match button_state { State::Key1 => println!("Key1 pressed"), State::Key2 => println!("Key2 pressed"), State::Key3 => println!("Key3 pressed"), } } else { println!("Nothing Pressed!") } } }

```

Roadmap

  1. Improve Graphics Library