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 在 硬件支持
每月186 次下载
46KB
763 行
Rust Wiimote 扩展控制器(Nunchuk/经典控制器)驱动程序
这是一个平台无关的Rust驱动程序,用于Wiimote扩展控制器(Nunchuk、Classic、Classic Pro、NES Classic、SNES Classic和克隆)使用embedded-hal
和embedded-hal-async
特性。
此驱动程序允许您读取Wiimote扩展控制器的所有轴和按钮
物理协议细节
Wiimote扩展控制器设计用于通过3.3V的I2C接口与Wiimote通信。官方控制器能够以快模式(400Khz)运行,尽管一些克隆需要正常模式(100Khz)。该协议非常简单 - 它没有正式记录,但已被逆向工程。
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Classic_Controller
高分辨率模式是最近添加的,仅在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 License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- 麻省理工学院许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~235KB