1

很基本的问题在这里:斯威夫特Sensortag 2.0写入BLE比特

我目前正试图通过Swift 3.0来控制sensortag 2.0。

我想同时打开acc,陀螺仪和磁力计。

根据德州仪器文档中,以下适用于IMU:

轴启用位:陀螺Z = 0,陀螺-Y,陀螺-X,ACC-Z = 3,ACC-Y, acc-x,mag = 6范围:bit 8,9

我已经用下面的方式写了“0x023F”,它打开了陀螺仪和加速度计的巨大成功。

   let value = OperationDataHolder(data:[0x023F]) 
       var parameter = 0x023F 
       let data = NSData(bytes: &parameter, length: 2) 
       self.sensorTagPeripheral.writeValue(data as Data, for: thisCharacteristic, type: CBCharacteristicWriteType.withResponse) 

但是,我无法找出写入的值来同时打开所有3个单元。有人能够为我提供这个价值吗?

谢谢!

回答

2

将当前使用的值(0x023F)转换为二进制文件时,会得到0b1000111111。每个位表示给定传感器组件的开/关(开= 1 /关= 0)状态。

如果您从从右到左读取的二进制数,并通过引用下表来映射每个位,您将看到陀螺仪z/y/x和加速度计z/y/x全部启用。如果要启用磁力计,只需将“位6”更改为“1”并将该二进制数转换为十六进制数。

所以,谷歌表示:0b100时 111111是0x027F十六进制

映射:
位0 =>陀螺z轴
位1 =>陀螺y轴
位2 =>陀螺x轴
位3 => ACC z轴
位4 => ACC y轴
位5 => ACC x轴
位6 => MAG(使所有的轴)
第7位=>唤醒的运动使
位8 & 9 =>加速度计范围
位10-15 =>不使用

有关映射的详细信息(即什么位8 & 9千万),看到Sensor Tag Wiki Page

+0

谢谢!这是一个非常有用的解释! – riceman89

1

大厦彼得斯回答,swifty的方式做,这是一个选择集,这是无可否认的工作更前面,但远远超过十六进制更易读:

struct SensorOptions: OptionSet { 
     let rawValue: Int32 
     static let gyroZ = SensorOptions(rawValue: 1 << 0) 
     static let gyroY = SensorOptions(rawValue: 1 << 1) 
     static let gyroX = SensorOptions(rawValue: 1 << 2) 
     static let accZ = SensorOptions(rawValue: 1 << 3) 
     static let accY = SensorOptions(rawValue: 1 << 4) 
     static let accX = SensorOptions(rawValue: 1 << 5) 
     static let mag = SensorOptions(rawValue: 1 << 6) 
     static let wakeOnMotion = SensorOptions(rawValue: 1 << 7) 
     static let accelerometerRange1 = SensorOptions(rawValue: 1 << 8) 
     static let accelerometerRange2 = SensorOptions(rawValue: 1 << 9) 
    } 

    let options: SensorOptions = [.gyroZ, .gyroY, .gyroX, .accZ, .accY, .accX, .mag, .accelerometerRange2] 
    var parameter = options.rawValue 
    let data = NSData(bytes: &parameter, length: 2) 
    self.sensorTagPeripheral.writeValue(data as Data, for: thisCharacteristic, type: CBCharacteristicWriteType.withResponse) 

此外,如果你不喜欢的选项设置快捷具有二进制文字,所以你可以在你的代码中编写变量参数= 0b1001111111代替0x027F

+0

这太棒了!感谢结构 - 我可能也会使用它。 :) – riceman89