#classic #driver #extension #wiimote #controller #embedded-hal #i2c

wii-ext

Wiimote 扩展控制器(Nunchuk,经典控制器)Rust嵌入式hal特性驱动程序

4 个版本 (重大变更)

0.4.0 2024年4月25日
0.3.0 2022年2月19日
0.2.0 2022年2月19日
0.1.0 2022年2月9日

#648硬件支持

Download history 104/week @ 2024-04-19 37/week @ 2024-04-26

每月186 次下载

MIT/Apache

46KB
763

Rust Wiimote 扩展控制器(Nunchuk/经典控制器)驱动程序

这是一个平台无关的Rust驱动程序,用于Wiimote扩展控制器(Nunchuk、Classic、Classic Pro、NES Classic、SNES Classic和克隆)使用embedded-halembedded-hal-async特性。

此驱动程序允许您读取Wiimote扩展控制器的所有轴和按钮

物理协议细节

Wiimote扩展控制器设计用于通过3.3V的I2C接口与Wiimote通信。官方控制器能够以快模式(400Khz)运行,尽管一些克隆需要正常模式(100Khz)。该协议非常简单 - 它没有正式记录,但已被逆向工程。

高分辨率模式是最近添加的,仅在NES Classic游戏机发布后才发现。这里有所描述

计划支持Wii Motion Plus,包括独立模式和组合模式

用法

要使用此驱动程序,导入此crate和一个embedded_hal/embedded_hal_async实现,然后实例化适当的设备。

use ::I2C; // insert an include for your HAL i2c peripheral name here
// use the synchronous/blocking driver
use wii_ext::blocking_impl::classic::Classic;
// use the asynchronous driver
// use wii_ext::async_impl::classic::Classic;

fn main() {
    let i2c = I2C::new(); // insert your HAL i2c init here
    let mut delay = cortex_m::delay::Delay::new(); // some delay source as well
    // Create, initialise and calibrate the controller
    // You could use Nunchuk::new() instead of Classic::new() here
    let mut controller = Classic::new(i2c, delay).unwrap();
    // Enable hi-resolution mode. This also updates calibration
    // Only supported for Classic controllers
    controller.enable_hires().unwrap();
    loop {
        // read_blocking returns calibrated data: joysticks and
        // triggers will return signed integers, relative to calibration
        // position. Eg: center is (0,0), left is (-90,0) in standard resolution
        // or (-126,0) in HD, etc
        let input = controller.read().unwrap();
        // You can read individual buttons...
        let a = input.button_a;
        let b = input.button_b;
        // or joystick axes
        let x = input.joystick_left_x;
        let y = input.joystick_left_y;
        // the data structs optionally support defmt::debug
        // if you enable features=["defmt_print"]
        info!("{:?}", input);
        // Calibration can be manually performed as needed
        controller.update_calibration().unwrap();
    }
}

状态

  • Nunchuk受支持
  • Classic控制器在常规和HD模式下受支持
  • 控制器初始化不可靠,可能受到i2c错误的影响。这似乎更多地影响了阻塞实现而不是异步。
    强烈建议在new()周围处理错误。

支持

有关问题、问题、功能请求(如与其他Wiimote扩展控制器的兼容性)请提交github项目中的问题

许可

此crate的Nunchuk部分主要来源于
https://github.com/rust-embedded/rust-i2cdev/blob/master/examples/nunchuck.rs
版权 2015,Paul Osborne [email protected]

许可为以下之一

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~235KB