BLE特性不接受int值



我似乎无法在BLE上传递整数值。

我使用#includeArduino图书馆。

发送的值不断转换到8位?

我已经尝试了一些事情,如改变BLE特征Int (BLEIntCharacteristic)和Char (BLECharCharacteristic),但这没有效果。

提前感谢。


void loop() {
int reading;

{
BLEDevice central = BLE.central();
if (central) 
{
digitalWrite(LED_BUILTIN, HIGH);
while (central.connected()) {

reading = adc.readFB(0, 2.5, 500000.00);

serviceCharacteristic.setValue(reading); //reading value from load sensor is eg ; 89943


Serial.print(reading);
Serial.print('n');
//delay(200);
}
}
digitalWrite(LED_BUILTIN, LOW);
}

蓝牙LE特性的数据类型始终是字节数组。创建适当的序列化是软件的任务。

在Arduino系统上有这样的转换。例子:

uint8_t byteArray[2];
int intValue = 42;
byteArray[0] = [highByte(val);
byteArray[1] = lowByte(val);
intValue = word( byteArray[0], byteArray[1]);

但请注意末尾。在不同的计算机系统中,较大类型的数据以不同的顺序存储,因此在重新组合数据时必须考虑这些顺序。

参考:

  • highByte ()
  • lowByte ()
  • 词()

好了,我终于在这些网站的帮助下弄明白了,我真的推荐大家去看看:

Quick Bird Studios如何在Swift中读取BLE特性

不安全的领土!理解Swift中的Raw Bytes和指针

这个堆栈溢出post

在Arduino端,这是我的代码:

...
BLEIntCharacteristic serviceCharacteristic(CHARACTERISTIC, BLERead | BLENotify);
...

int reading;

{
BLEDevice central = BLE.central();
if (central) 
{
digitalWrite(LED_BUILTIN, HIGH);
while (central.connected()) {

reading = adc.readFB(0, 2.5, 500000.00);

serviceCharacteristic.setValue(reading); //reading value from load sensor is eg ; 89943

上。在我的Swift应用程序的客户端,有一次我发现Arduino BLE Device通过调用data发送了四个字节的数据。我将类型从[UINIT8]更改为[UINT32],然后BAM!现在我只需要得到数组中的第一个值!

编辑:我将[UInt32]数组更改为本地[Int]以实现相同的结果。

如果有人看到我这样做的方式有问题,或者可以使代码更明确和有效,请大声喊出来!

guard let data = characteristic.value else{
return
}

print(data.count)
let numberOfBytes = data.count
var rxByteArray = [Int](repeating: 0, count: numberOfBytes)
(data as NSData).getBytes(&rxByteArray, length: numberOfBytes)
print(rxByteArray)

最新更新