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);
        }
Beispiel #2
0
 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);
     });
 }
Beispiel #3
0
 /// <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
     {
     }
 }
Beispiel #4
0
        /// <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));
            }
        }
Beispiel #5
0
        /// <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));
            }
        }