Как исправить этот код, когда байты длиннее 20? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь выяснить, как проанализировать значение устройства Bluetooth с характеристикой, значение которой превышает 20 байт.

У меня есть код ниже, который в основном срабатывает каждый раз, когда значение характеристикиобновляется.Однако, поскольку общее количество значений велико, кажется, что функция didUpdateValueFor, по-видимому, выдает 4 или 5 уведомлений, прежде чем я получу общий объем данных.В данный момент я перебираю значение и добавляю массив, который я буду использовать для отображения некоторых данных.Есть ли способ собрать все данные в один массив без необходимости каждый раз выполнять этот цикл?На данный момент я получаю следующие данные:

[89, 0, 44, 0, 84, 0, 112, 0, 125, 0, 125, 0, 134, 0, 144, 0, 153, 0, 162, 0]

[89, 1, 163, 0, 163, 0, 162, 0, 167, 0, 169, 0, 172, 0, 176, 0, 176,0, 177, 0]

[89, 2, 182, 0, 181, 0, 181, 0, 182, 0, 181, 0, 169, 0, 164, 0, 157, 0, 139, 0]

[89, 3, 135, 0, 119, 0, 117, 0, 101, 0, 101, 0, 84, 0, 85, 0, 70, 0, 70, 0]

[84, 4, 55, 0, 46, 0, 26, 0, 21, 0]

Первое значение в каждом из массивов не имеет значения.Однако второе значение является значением MS и должно быть равно нулю.Однако каждый раз, когда выполняется цикл, кажется, что он увеличивается на единицу каждый раз.Поскольку мне нужно умножить это число на 256 (если значение значения LS превысит 256), у меня возникнут проблемы, если я просто проигнорирую его (что и делает мой код сейчас, как опубликовано ниже)

if characteristic.uuid == IDENTIFIER {

                let v = characteristic.value;
                print("this is what we have: \(value)")

                //let numDataPoints = v![0] & 0x0f
                let numDataPoints = v![0]

                print("Number of data points:\(numDataPoints)")

                for i in 1...v!.count-2 {

                    intIndex = Int(i)
                    let datapointnew = Int(v![intIndex!])
                    if datapointnew > 5 {
                         datapointArray.append(datapointnew)
                    } else {
                         datapointArray.append(0)
                    }


                }

                intIndex = 0  
        }

Второе значение в каждом массиве должно быть 0 с этим набором данных.Заранее благодарим за любую помощь, которую вы можете предложить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...