/// <summary>
        /// Handle periodic sensor readings from the brick
        /// </summary>
        /// <param name="update"></param>
        private void NotificationHandler(pxbrick.LegoSensorUpdate update)
        {
            I2CResponseMindSensorsAccelerationSensor inputValues = new I2CResponseMindSensorsAccelerationSensor(update.Body.CommandData);

            if (inputValues.Success)
            {
                double x, y, z;
                if (_state.ZeroOffset == null)
                {
                    x = inputValues.X;
                    y = inputValues.Y;
                    z = inputValues.Z;
                }
                else
                {
                    // Adjust Zero Offset
                    x = (inputValues.X + 256.0 - _state.ZeroOffset.X) % 256.0;
                    y = (inputValues.Y + 256.0 - _state.ZeroOffset.Y) % 256.0;
                    z = (inputValues.Z + 256.0 - _state.ZeroOffset.Z) % 256.0;
                }

                _state.Tilt.TimeStamp = inputValues.TimeStamp;
                _state.Tilt.X         = x;
                _state.Tilt.Y         = y;
                _state.Tilt.Z         = z;

                SendNotification <AccelerometerUpdate>(_subMgrPort, _state.Tilt);
            }
        }
        /// <summary>
        /// Handle periodic sensor readings from the brick
        /// </summary>
        /// <param name="update"></param>
        private void NotificationHandler(pxbrick.LegoSensorUpdate update)
        {
            I2CResponseHiTechnicAccelerationSensor inputValues = new I2CResponseHiTechnicAccelerationSensor(update.Body.CommandData);

            if (inputValues.Success)
            {
                _state.Tilt.TimeStamp = inputValues.TimeStamp;

                if (_state.ZeroOffset == null)
                {
                    _state.Tilt.X = inputValues.X;
                    _state.Tilt.Y = inputValues.Y;
                    _state.Tilt.Z = inputValues.Z;
                }
                else
                {
                    // Adjust Zero Offset
                    _state.Tilt.X = (inputValues.X + 512.0 - _state.ZeroOffset.X) % 1024.0 - 512.0;
                    _state.Tilt.Y = (inputValues.Y + 512.0 - _state.ZeroOffset.Y) % 1024.0 - 512.0;
                    _state.Tilt.Z = (inputValues.Z + 512.0 - _state.ZeroOffset.Z) % 1024.0 - 512.0;
                }

                SendNotification <AccelerometerUpdate>(_subMgrPort, _state.Tilt);
            }
        }
Exemple #3
0
        /// <summary>
        /// Handle periodic sensor readings from the pxbrick
        /// </summary>
        /// <param name="update"></param>
        private void NotificationHandler(pxbrick.LegoSensorUpdate update)
        {
            I2CResponseHiTechnicCompassSensor inputValues = new I2CResponseHiTechnicCompassSensor(update.Body.CommandData);

            if (inputValues.Success && inputValues.Heading < 360)
            {
                if (_state.Heading.Degrees != (double)inputValues.Heading || _state.Heading.TimeStamp == DateTime.MinValue)
                {
                    _state.Heading.TimeStamp = inputValues.TimeStamp;
                    _state.Heading.Degrees   = (double)inputValues.Heading;
                    SendNotification <CompassSensorUpdate>(_subMgrPort, _state.Heading);
                    SendNotification <pxanalogsensor.Replace>(_genericSubMgrPort, SyncGenericState());
                }
            }
        }