>

Swift 3에 Core Bluetooth를 사용하면 CBPeripheral.writeValue() 를 사용합니다  센트럴에 특징을 쓰려고합니다.  변화. 슬라이더를 천천히 드래그 할 때도 때때로 센트럴에서 값이 증가하는 것을 알았습니다. 아마도 일부 무선 손상이 발생했다고 생각했기 때문에 동일한 값을 세 번 쓰도록 특성을 변경했습니다. 이제 Central 경기에서받은 모든 값이 해당 값에 대해서만 작용합니다. 현재 코드는 다음과 같습니다.

UISlider

이것에도 불구하고, 나는 여전히 가치 상승을 봅니다. 와이즈 비즈  명령문은 항상 같은 (그리고 올바른) 숫자를 세 번 인쇄합니다. 마찬가지로 Central에서 값이 이동하면 3 개의 동일하지만 잘못된 값이 수신됩니다. 어떻게 이럴 수있어? 내가 생각할 수있는 것은 Core Bluetooth의 어떤 것이 공기를 넣기 전에 가치를 변화시키고 있지만 확실하지 않으며,주의를 집중해야 할 곳을 모른다는 것입니다.

@IBAction func slideValChanged(_ sender: UISlider) { let sliderVal = UInt8(sender.value.rounded(FloatingPointRoundingRule.down)) if (sliderVal != self.sliderVal) { self.sliderVal = sliderVal self.bytes.removeAll() self.bytes = [self.sliderVal, self.sliderVal, self.sliderVal] DispatchQueue.global(qos: .userInitiated).async { self.data = Data(bytes: self.bytes) self.peripheral.writeValue(self.data, for: self.writeCharacteristic!, type: CBCharacteristicWriteType.withResponse) print("Write values sent:", self.bytes[0], self.bytes[1], self.bytes[2]) } } }

  • 답변 # 1

    CBCharacteristicWriteType.withResponse를 사용함에 따라 슬라이더의 움직임이 느리더라도 많은 패킷으로 전송됩니다. writeCharacteristic 명령에 쓸 때는 writeCharacteristic을 다시 호출하기 전에 콜백을 기다려야합니다. 콜백은 데이터가 중앙 BLE 스택에 버퍼링되었고 스택이 추가 데이터를 수신 할 준비가되었음을 나타냅니다. 이것이 없으면 데이터가 손상되거나 연결이 끊어 질 수 있습니다.

  • 이전 bigdata - HiveQL에서 쿼리 결과를 키 값 양식으로 가져 오는 방법
  • 다음 javascript - ng-readonly = true 이후 빈 ng- 모델 데이터에 집중