1

我编写了一个应用程序,试图获取并更新我的 cB-OLP425 模块上的电池电量。

我使用了以下代码,但有时它给我的值是 70,有时它给我的值是 -104。我查看了很多帖子并尝试了很多东西,但似乎没有任何效果。

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
if([service.UUID isEqual:[CBUUID UUIDWithString:@"180F"]]) {
        for (CBCharacteristic *characteristic in service.characteristics) {
            NSLog(@"discovered service %@", service.UUID);
            if([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"2A19"]]) {
                NSLog(@"Found Notify Characteristic %@", characteristic.UUID);
                 self.mycharacteristic = characteristic;
                [self.testPeripheral readValueForCharacteristic:mycharacteristic];
                [self.testPeripheral setNotifyValue:YES forCharacteristic:mycharacteristic];

               char batlevel;
                [mycharacteristic.value getBytes:& batlevel length:0];

                int n = (float)batlevel;
                int value = n ;

                self.batteryLevel = value;
                NSLog(@"batterylevel1;%f",batteryLevel);
            /* [[NSUserDefaults standardUserDefaults]setFloat: batteryLevel forKey:@"battery_level"];*/
                           }
             } }
 }
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
if([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"2A19"]]) {
                NSLog(@"Found Battery Characteristic %@", characteristic.UUID);
 [mycharacteristic.value getBytes:& batteryLevel length:0];

                return;
 }
 [self.delegate peripheralDidReadChracteristic:mycharacteristic withPeripheral:testPeripheral withError:error];
}

有人可以帮我吗!

4

1 回答 1

1

你的getBytes似乎是问题所在。我们使用以下方法在我们的应用程序中读取电池电量:

UInt8 batteryLevel = ((UInt8*)value.bytes)[0];

你也可以这样做:

UInt8 batteryLevel;
[value getBytes:&battery length:1];

您需要确保类型是正确的,UInt8否则您会将其读入错误的位置。

另外,不要立即读取didDiscoverCharacteristicsForService. 等到您收到值已更新的通知。文档状态:

当您尝试读取特性的值时,外围设备会调用其委托对象的 peripheral:didUpdateValueForCharacteristic:error: 方法来检索该值。如果成功检索到值,则可以通过特征的 value 属性访问它,如下所示:

于 2014-04-16T17:36:22.943 回答