2015-05-21 4 views
2

Как читать и записывать значение, если в характеристике есть несколько свойств?BLE (устройство включения BlueTooth) ios

Например СИД цвета в RGB:

Характеристика: LED Цвет UUID: 7A5A0011-D04B-48EB-B3FA-32EB4F0FFAC4 LED цвет и интенсивность в формате RGB. Имя Зеленый Название Синий Формат неподписанное 8-битовое целое Доступ к чтению, запись Значение 0 - 255 Формат неподписанное 8-битовое целое Доступ к чтению, запись Значение 0 - 255 Название Красный Формат беззнакового 8-разрядного целого Доступ к чтению, запись Значение 0 - 255

Так как читать/писать значение для RGB? Использование кода ниже я получаю только одно значение

if ([service.UUID isEqual:[CBUUID UUIDWithString:LED_Service_UUID]]){ 
     for (CBCharacteristic *aChar in service.characteristics) { 
      /********* Characteristic: LED Link***************/ 

      NSLog(@"%@",aChar.UUID); 

      if ([aChar.UUID isEqual:[CBUUID UUIDWithString: LED_CHAR_COLOR_UUID]]) { 
       [peripheral readValueForCharacteristic:aChar]; 
       NSLog(@"%@%@%@",aChar.value,aChar.value,aChar.value); 
     } 

ответ

0
if ([aChar.UUID isEqual:[CBUUID UUIDWithString: LED_CHAR_COLOR_UUID]]) 
{ 
    _colorCharacteristic = aChar; //It's a property, save it 
    [peripheral readValueForCharacteristic:aChar]; 
} 

Это должно вызвать метод делегата: peripheral:didUpdateValueForCharacteristic:error:.

Внутри, это:

if ([characteristic UUID] isEqual:[CBUUID UUIDWithString: LED_CHAR_COLOR_UUID]]) 
{ 
    NSData *valueData = [characteristic value]; 
} 

Для каждого компонента (красный, зеленый, синий, интенсивность):

int aComponent; 
NSData *aComponentData = [valueData subdataWithRange:NSMakeRange(0, 2)]; //Range to be defined for each components 
[aComponentData getBytes:&aComponent length:sizeof(aComponent)]; 
NSLog(@"aComponent: %d", aComponent); 

Затем можно создать UIColor от каждого из компонентов с использованием colorWithRed:green:blue:alpha:.

Чтобы написать, у вас должен быть NSData, который выглядит уважительно используемым форматом.

uint8_t colorValues [] = {redValue, greenValue, blueValue, intensityValue}; 
NSData *data = [NSData dataWithBytes:colorValues length:sizeof(colorValues)]; 
[_peripheral writeValue:yourValueData forCharacteristic:_colorCharacteristic type: CBCharacteristicWriteWithResponse];` //(or `CBCharacteristicWriteWithoutResponse` depending on the doc of your device). 
Смежные вопросы