如何解决SwiftUI:使用来自不同视图的数据将特性写入 BLE 外设的函数
我正在 SwiftUI 中构建一个应用程序,该应用程序通过 BLE 与具有 LED 环形灯的自定义设备进行通信。我不知道如何使用来自其他视图的数据/变量正确编码写入函数。
在 ringLight.swift
上,我有一个带有 rgbColour
变量的色轮,它由三个用于 rgb 值的浮点数组成。我还有一个开关,当点击它时应该做两件事(打开灯):
我试图将包含特征数据的 UI 视图与 BLEManager 分开。关于如何正确构建这个/如何执行写入功能的任何见解?谢谢!!
ringLight.swift
struct ringLight: View {
@State var rgbColour = RGB(r: 0,g: 1,b: 1)
@State var brightness: CGFloat = 1
@State var turnHubLEDON = false
@Observedobject var bleManager = BLEManager()
var body: some View {
vstack {
/// The text at the top.
HStack {
Text("Choose your hub color")
.font(.largeTitle)
.fontWeight(.light)
.padding(.bottom,50)
}
/// The actual colour wheel.
ColourWheel(radius: 300,rgbColour: $rgbColour,brightness: $brightness)
.padding(.bottom,30)
/// The slider shows the selected colour and allows control of the brightness/value. Cannot have value at 0 otherwise we lose the RGB value.
CustomSlider(rgbColour: $rgbColour,value: $brightness,range: 0.001...1)
.padding()
Text("R: \(CGFloat(rgbColour.r)) G: \(CGFloat(rgbColour.g)) B: \(CGFloat(rgbColour.b))")
vstack{
Toggle("Light",isOn: $turnHubLEDON).labelsHidden().padding()
if turnHubLEDON {
// **Function to send the rgbColour variable & Config Integer here**
}
}
} // End vstack
}
}
BLEManager.swift(相关部分)
class BLEManager: NSObject,ObservableObject,CBCentralManagerDelegate,CBPeripheralDelegate {
var myCentral: CBCentralManager!
var myPeripheral: CBPeripheral!
//LED Light
var ConfigChar: CBCharacteristic?
var RGBChar: CBCharacteristic?
var BrightnessChar: CBCharacteristic?
@Published var isSwitchedOn = false
@Published var hubPeripheral = [Peripheral]()
@Published var hubIsConnected = false
override init() {
super.init()
myCentral = CBCentralManager(delegate: self,queue: nil)
myCentral.delegate = self
}
func peripheral(_ peripheral: CBPeripheral,diddiscovercharacteristicsFor service: CBService,error: Error?) {
if let characteristics = service.characteristics {
for characteristic in characteristics {
//LED Light
if characteristic.uuid == HubPeripheral.ConfigCharacteristicUUID {
print("LED Configuration Characteristic Found")
ConfigChar = characteristic
} else if characteristic.uuid == HubPeripheral.RGBCharacteristicUUID {
print("LED RGB Characteristic Found")
RGBChar = characteristic
} else if characteristic.uuid == HubPeripheral.BrightnessCharacteristicUUID {
print("LED Brightness Characteristic Found")
BrightnessChar = characteristic
}
} // End characteristics
} // End If statement
} // End Diddiscovercharacteristics
// **How do I structure these write functions to include data from ringLight.swift?**
func writeConfigurationValue() {
var parameter = NSInteger(1)
let data = NSData(bytes: ¶meter,length: 1)
myPeripheral.writeValue(data as Data,for: ConfigChar!,type: .withoutResponse)
}
} // End Delegate
特点
class HubPeripheral: NSObject {
/// MARK: - Hub LED services and characteristics
public static let RingLightServiceUUID = CBUUID.init(string: "020013ac-4202-93ae-eb11-7d58e021f8f1")
public static let RGBCharacteristicUUID = CBUUID.init(string: "fdefb439-68de-1a88-5345-5cc9f9ff5605")
public static let BrightnessCharacteristicUUID = CBUUID.init(string: "4960d639-1407-9cbb-6846-5360eb5e6346")
public static let ConfigCharacteristicUUID = CBUUID.init(string: "cc0a6373-dc51-c1af-0140-b0322225ed9b")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。