如何在Swift 4的UITextbox中显示来自BLE外设的连续数据?

时间:2017-12-22 12:13:12

标签: ios swift bluetooth-lowenergy

我目前正在与外围设备进行交互,我可以读取和写入外设,并在文本框中显示输入数据。

现在点击按钮,我在一个功能块中使用读取和写入字节,我在按钮点击操作中调用。

@IBAction func data(_ sender: Any) {

        checkdata()
    }

现在我的问题,

我的接收端有一个连续的字节数组流,我需要不断显示在文本框中吗?有人可以指导我如何完成它吗?

//Now my function 
fun checkdata(){

//WRITE CODE 

let bytes : [UInt8] = [ 0x1A, 0x2B, 0x3C, 0x4D ]
            let Transmitdata = NSData(bytes: bytes, length: bytes.count)
            peripheral.writeValue(Transmitdata as Data, for: txCharacteristic!, type: CBCharacteristicWriteType.withoutResponse)
            print("Data Sent",Transmitdata)


//READ CODE

  let ReceiveData = rxCharacteristic?.value
            if let ReceiveData = ReceiveData {
                let ReceivedNoOfBytes = ReceiveData.count
                myByteArray = [UInt8](repeating: 0, count: ReceivedNoOfBytes)
                (ReceiveData as NSData).getBytes(&myByteArray, length: ReceivedNoOfBytes)
                print("Data Received ",myByteArray)
                   }


//DISPLAY RECEIVED DATA

var b0 = myByteArray[0]
var b1 = myByteArray[1]
var b2 = myByteArray[2]
var b3 = myByteArray[3]



datatextbox1.text = "\(b0)"
datatextbox2.text = "\(b1)"
datatextbox3.text = "\(b2)"
datatextbox4.text = "\(b3)"

}

因此接收数据是连续的,直到执行另一个按钮touchinside。 (不充分/不工作)

//DATA IS DISPLAYED UNTIL NEXT BUTTON IS PRESSED

while(self.stopbutton.touchInside = true){
//WRITE DATA
//READ DATA
//DISPLAY DATA
}

编辑1:尝试FUNC DIDUPDATE VALUE

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

 //READ CODE

      let ReceiveData = rxCharacteristic?.value
                if let ReceiveData = ReceiveData {
                    let ReceivedNoOfBytes = ReceiveData.count
                    myByteArray = [UInt8](repeating: 0, count: ReceivedNoOfBytes)
                    (ReceiveData as NSData).getBytes(&myByteArray, length: ReceivedNoOfBytes)
                    print("Data Received ",myByteArray)
                       }


    //DISPLAY RECEIVED DATA

    var b0 = myByteArray[0]
    var b1 = myByteArray[1]
    var b2 = myByteArray[2]
    var b3 = myByteArray[3]



    datatextbox1.text = "\(b0)"
    datatextbox2.text = "\(b1)"
    datatextbox3.text = "\(b2)"
    datatextbox4.text = "\(b3)"

    }

}

0 个答案:

没有答案