微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI:使用来自不同视图的数据将特性写入 BLE 外设的函数

如何解决SwiftUI:使用来自不同视图的数据将特性写入 BLE 外设的函数

我正在 SwiftUI 中构建一个应用程序,该应用程序通过 BLE 与具有 LED 环形灯的自定义设备进行通信。我不知道如何使用来自其他视图的数据/变量正确编码写入函数

ringLight.swift 上,我有一个带有 rgbColour 变量的色轮,它由三个用于 rgb 值的浮点数组成。我还有一个开关,当点击它时应该做两件事(打开灯):

  1. 将 rbgColour 变量(3 个浮点数)写入 RGBCharacteristicUUID
  2. 将整数 1 发送到 ConfigCharacteristicUUID 以打开灯。

我试图将包含特征数据的 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: &parameter,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 举报,一经查实,本站将立刻删除。