public void OnSensorChanged(SensorEvent e) { var accelerometerEvent = new AccelerometerEvent(); accelerometerEvent.XAcc = e.Values[0] / 9.81f; accelerometerEvent.YAcc = e.Values[1] / 9.81f; accelerometerEvent.ZAcc = e.Values[2] / 9.81f; AccelerationChanged?.Invoke(this, accelerometerEvent); }
public void StartListening() { _manager = new CMMotionManager(); _manager.StartAccelerometerUpdates(NSOperationQueue.CurrentQueue, (data, error) => { AccelerometerEvent e = new AccelerometerEvent { XAcc = (float)data.Acceleration.X, YAcc = (float)data.Acceleration.Y, ZAcc = -(float)data.Acceleration.Z, }; AccelerationChanged?.Invoke(this, e); }); }
/// <summary> /// Called when a variometer value is being notified /// </summary> /// <param name="characteristic">Characteristic which notified the value</param> /// <param name="value">New characteristic value</param> private void OnVariometerNotification(BleGattCharacteristic characteristic, BleValue value) { if (characteristic.Guid == VarioGuid) { VarioChanged?.Invoke(value.ToInt16()); } else if (characteristic.Guid == AccelerationGuid) { AccelerationChanged?.Invoke(value.ToUInt8()); } else { } }
/// <summary> /// Read the sensor output and convert the sensor readings into acceleration values. /// </summary> public async Task Update() { X = (await _xPort.Read() - _zeroGVoltage) / XVoltsPerG; Y = (await _yPort.Read() - _zeroGVoltage) / YVoltsPerG; Z = (await _zPort.Read() - _zeroGVoltage) / ZVoltsPerG; if (_updateInterval == 0 || ((Math.Abs(X - _lastX) > AccelerationChangeNotificationThreshold) || (Math.Abs(Y - _lastY) > AccelerationChangeNotificationThreshold) || (Math.Abs(Z - _lastZ) > AccelerationChangeNotificationThreshold))) { var lastNotifiedReading = new Vector(_lastX, _lastY, _lastZ); var currentReading = new Vector(_lastX = X, _lastY = Y, _lastZ = Z); AccelerationChanged?.Invoke(this, new SensorVectorEventArgs(lastNotifiedReading, currentReading)); } }
/// <summary> /// Read the six sensor bytes and set the values for the X, Y and Z acceleration. /// </summary> /// <remarks> /// All six acceleration registers should be read at the same time to ensure consistency /// of the measurements. /// </remarks> public void Update() { var data = _adxl345.ReadRegisters(Registers.X0, 6); X = (short)(data[0] + (data[1] << 8)); Y = (short)(data[2] + (data[3] << 8)); Z = (short)(data[4] + (data[5] << 8)); if ((_updateInterval != 0) && ((Math.Abs(X - _lastX) > AccelerationChangeNotificationThreshold) || (Math.Abs(Y - _lastY) > AccelerationChangeNotificationThreshold) || (Math.Abs(Z - _lastZ) > AccelerationChangeNotificationThreshold))) { Vector lastNotifiedReading = new Vector(_lastX, _lastY, _lastZ); Vector currentReading = new Vector(X, Y, Z); _lastX = X; _lastY = Y; _lastZ = Z; AccelerationChanged?.Invoke(this, new SensorVectorEventArgs(lastNotifiedReading, currentReading)); } }