我目前正在与外围设备进行交互,我可以读取和写入外设,并在文本框中显示输入数据。
现在点击按钮,我在一个功能块中使用读取和写入字节,我在按钮点击操作中调用。
@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)"
}
}