こんにちは私は素早く初心者で、極限の心拍数で1つのBLEを伝達するアプリケーションを作成しようとしていますが、特性によって生成されたデータ構造から正しい情報を取得するのに問題があります。 、私は実際にそれをuint8からintや文字列のようなより単純なものに変換する問題があります。BLEから文字列を取得
は、彼女は私のコードです:私は多くの方法をトライが、私は迅速に新しいですし、毎年、この言語での更新があるため、迅速な3は容易ではありません
func peripheral(_ peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {
if characteristic.uuid == POLARH7_HRM_MEASUREMENT_CHARACTERISTIC_UUID {
print("Get the new heart BPM : ", terminator:"")
var wavelength: UInt16?
if let data = characteristic.value {
var bytes = Array(repeating: 0 as UInt8, count:(characteristic.value?.count)!/MemoryLayout<UInt8>.size)
data.copyBytes(to: &bytes, count:data.count)
let data16 = bytes.map { UInt16($0) }
wavelength = 256 * data16[1] + data16[0]
}
print("W : ")
print(wavelength)
}
if characteristic.uuid == POLARH7_HRM_BODY_LOCATION_CHARACTERISTIC_UUID {
print("Get the new sensor location", terminator:"")
print(characteristic.value)
//let data = NSData(data: characteristic.value as! Data)
}
if characteristic.uuid == POLARH7_HRM_MANUFACTURER_NAME_CHARACTERISTIC_UUID {
print("Get the new name", terminator:"")
print(characteristic.value)
}
}
ほとんどのヒントので見つかったObjective-CであったりSWIFT 2.このような中 はexemples:
// Instance method to get the manufacturer name of the device
- (void) getManufacturerName:(CBCharacteristic *)characteristic
{
NSString *manufacturerName = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding]; // 1
self.manufacturer = [NSString stringWithFormat:@"Manufacturer: %@", manufacturerName]; // 2
return;
}
または
- (void) getHeartBPMData:(CBCharacteristic *)characteristic error:(NSError *)error
{
// Get the Heart Rate Monitor BPM
NSData *data = [characteristic value]; // 1
const uint8_t *reportData = [data bytes];
uint16_t bpm = 0;
if ((reportData[0] & 0x01) == 0) { // 2
// Retrieve the BPM value for the Heart Rate Monitor
bpm = reportData[1];
}
else {
bpm = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[1])); // 3
}
// Display the heart rate value to the UI if no error occurred
if((characteristic.value) || !error) { // 4
self.heartRate = bpm;
self.heartRateBPM.text = [NSString stringWithFormat:@"%i bpm", bpm];
self.heartRateBPM.font = [UIFont fontWithName:@"Futura-CondensedMedium" size:28];
[self doHeartBeat];
self.pulseTimer = [NSTimer scheduledTimerWithTimeInterval:(60./self.heartRate) target:self selector:@selector(doHeartBeat) userInfo:nil repeats:NO];
}
return;
}
ありがとうございます
ありがとうThomas ^^、どのようにuint8を取得し、bpmの例のようにuint16または標準intに変換してください。 –
これを試しましたか? 'let bpm = Int(value)'? – Thomas
はい、それは私に言っています: '(データ?)'型の引数を使ってinitialierを呼び出すことはできません –