一个用于 Wii Nunchuck 控制器的 Swift 库
该库从通过 I2C 连接到您的 RaspberryPi 或类似板的 Wii Nunchuck 控制器读取加速计、操纵杆和按钮值。
市场上有一些这种控制器的廉价克隆品,它们与原始控制器的区别在于启用控制器所需的初始化顺序。提供的几个默认值应涵盖大多数可用的型号。
控制器需要 3.3V 才能工作,但应该可以承受 5V 电压,您可能需要一个专有连接器的适配器,以便更容易地访问各个引脚。 我使用的是 Olimex 板的 ICSP 适配器,但只要您可以将东西连接到它(例如,杜邦母头连接器或直接将其连接到 RaspberryPi 排针),任何适配器都可以。
如果您想通过终端使用控制器,它的 I2C 地址是 0x52(不是十进制,就像许多指南报告的那样)。
要初始化此库的 Nunchuck
类,您需要一个来自 SwiftyGPIO 的 I2CInterface
实例,并且如果控制器不是原装的,则需要指定控制器类型(尝试所有枚举,直到找到一个有效的)。 可选地,也可以为非标准控制器指定 I2C 地址。
import SwiftyGPIO
import Nunchuck
import Foundation
let i2cs = SwiftyGPIO.hardwareI2Cs(for:.RaspberryPi2)!
let i2c = i2cs[1]
let mp = Nunchuck(i2c, type: .Knockoff1)
可以作为单个属性读取从控制器读取的值(加速度计值、模拟操纵杆位置和按钮状态)
public var AccelX: Int
public var AccelY: Int
public var AccelZ: Int
public var AnalogX: Int
public var AnalogY: Int
public var Buttons: Int
或者一次性读取所有值,调用 getAll()
方法
let (ax,ay,az,jx,jy,b) = mp.getAll()
print("Accelerometer - x:\(ax),y:\(ay),z:\(az)")
print("Analog Joystick - x:\(jx),y:\(jy)")
switch b {
case 0:
print("Buttons: Both pressed")
case 1:
print("Buttons: C pressed")
case 2:
print("Buttons: Z pressed")
default:
print("Buttons: None pressed")
}
所有由 SwiftyGPIO 支持的板:RaspberryPis、BeagleBones、C.H.I.P. 等...
要使用此库,您需要一个运行 Swift 3.x/4.x 的 Linux ARM 板。
下面的示例将使用 RaspberryPi 2 板,但您可以轻松修改示例以使用其他支持的板之一,RaspberryPi2 的完整工作演示项目可在 Examples
目录中找到。
请参考 SwiftyGPIO 的 readme 文件获取 Swift 安装说明。
一旦您的板运行 Swift,如果您的版本支持 Swift Package Manager,您可以简单地将此库添加为项目的依赖项并使用 swift build
进行编译
let package = Package(
name: "MyProject",
dependencies: [
.Package(url: "https://github.com/uraimo/Nunchuck.swift.git", majorVersion: 2),
]
)
目录 Examples
包含使用 SPM 的示例项目,编译它并使用 ./.build/debug/TestNunchuck
运行示例。
如果不支持 SPM,您需要手动下载该库及其依赖项
wget https://raw.githubusercontent.com/uraimo/Nunchuck.swift/master/Sources/Nunchuck.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SwiftyGPIO.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/Presets.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/I2C.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SunXi.swift
下载所有文件后,创建一个额外的文件,其中包含您的应用程序的代码(例如,main.swift)。 当您的代码准备就绪时,使用以下命令编译它
swiftc *.swift
编译器将创建一个 main 可执行文件。