Swift CoreBluetooth Чтение массива с плавающей запятой из BLE - PullRequest
0 голосов
/ 18 июня 2020

Я быстро создаю приложение iOS, используя CoreBluetooth для связи BLE. Я могу подключиться и подписаться на характеристики устройства Arduino. Я могу успешно читать данные с этого устройства Arduino, но сейчас я пишу с помощью Arduino только одно значение с плавающей запятой. Я знаю, что didUpdateValueFor считывает его как объект данных, и вам нужно преобразовать данные в значения, которые вы ищете. Мне удалось преобразовать его в значение с плавающей запятой, как показано ниже. Я хочу отправить несколько значений с плавающей запятой, в частности, это показания акселерометра, значения с плавающей запятой XY Z. Я отправляю их как массив с плавающей запятой, но у меня возникают проблемы с преобразованием и отображением значений с плавающей запятой на стороне приложения. Любая помощь приветствуется. Спасибо.

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    guard characteristic == rxCharacteristic,
        let data:Data = characteristic.value
        else { return }

    let number: Float = data.withUnsafeBytes {
        (pointer: UnsafePointer<Float>) -> Float in

        return pointer.pointee
    }
    print("\nValue Received : ", number)

1 Ответ

0 голосов
/ 18 июня 2020

Edit: это код, который я использовал для тестирования получения массива чисел с плавающей запятой из представления данных:

    let arr: [Float] = [32.0, 4.0, 1.2]
    let data = Data(buffer: UnsafeBufferPointer(start: arr, count: arr.count))
    print("---> data: \(data)")

    var myFloatArray = Array<Float>(repeating: 0, count: data.count/MemoryLayout<Float>.stride)
    myFloatArray.withUnsafeMutableBytes { data.copyBytes(to: $0) }

    print("---> myFloatArray: \(myFloatArray)")
...