This is a platform agnostic Rust driver for Wiimote Extension controllers (Nunchuk, Classic, Classic Pro, NES Classic, SNES Classic, and clones) using the [embedded-hal
] traits.
This driver allows you to read all axes and buttons for Wiimote Extension controllers
Wiimote extension controllers are designed to talk to a Wiimote over an I2C interface at 3.3V. The official controllers are capable of operating in fast-mode (400Khz) though some clones require normal-mode (100Khz). The protocol is quite simple - it's not officially documented, but it has been reverse-engineered.
High Resolution mode is a recent addition and was only discovered once the NES Classic console was released. It is described here: - https://www.raphnet-tech.com/support/classiccontrollerhigh_res/
Wii Motion Plus support is planned, both in standalone and combo mode
To use this driver, import this crate and an embedded_hal
implementation,
then instantiate the appropriate device.
```rust use wii_ext::classic::Classic; use ::I2C; // insert an include for your HAL i2c peripheral name here
fn main() { let i2c = I2C::new(); // insert your HAL i2c init here let mut delay = cortexm::delay::Delay::new(); // some delay source as well // Create, initialise and calibrate the controller let mut controller = Classic::new(i2c, &mut delay).unwrap(); // Enable hi-resolution mode. This also updates calibration controller.enablehires(&mut delay).unwrap(); loop { let input = controller.readblocking(&mut delay).unwrap(); // You can read individual buttons... let a = input.buttona; let b = input.buttonb; // or joystick axes let x = input.joystickleftx; let y = input.joysticklefty; // the data structs optionally support defmt::debug // if you enable features=["defmtprint"] info!("{:?}", read); // Calibration can be manually performed as needed controller.update_calibration(); } } ```
For questions, issues, feature requests like compatibility with other Wiimote extension controllers please file an issue in the github project.
Nunchuk portions of this crate are largely derived from
https://github.com/rust-embedded/rust-i2cdev/blob/master/examples/nunchuck.rs
Copyright 2015, Paul Osborne osbpau@gmail.com
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.