示例#1
0
        private void TimerCallback(object state)
        {
            RTIMUData data = thread.GetIMUData;

            var task = this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                TextGyro.Text = string.Format("Gyro (radians/sec):: x: {0:F4}, y: {1:F4}, z: {2:F4}",
                                              data.gyro.X, data.gyro.Y, data.gyro.Z);
                TextAccel.Text = string.Format("Accel (g):: x: {0:F4}, y: {1:F4}, z: {2:F4}",
                                               data.accel.X, data.accel.Y, data.accel.Z);
                TextMag.Text = string.Format("Mag (uT):: x: {0:F4}, y: {1:F4}, z: {2:F4}",
                                             data.mag.X, data.mag.Y, data.mag.Z);

                TextPose.Text  = RTMath.DisplayDegrees("Pose:", data.fusionPose);
                TextQPose.Text = RTMath.Display("QPose:", data.fusionQPose);

                BiasTextStatus.Text = string.Format("Gyro bias:: {0}, Mag cal: {1}",
                                                    thread.GyroBiasValid ? "valid" : "invalid", thread.MagCalValid ? "valid" : "invalid");

                TextPressure.Text    = string.Format("Pressure (hPa):: {0:F4}", data.pressure);
                TextHumidity.Text    = string.Format("Humidity (%RH):: {0:F4}", data.humidity);
                TextTemperature.Text = string.Format("Temperature (degC):: {0:F4}", data.temperature);

                if (thread.IMUInitComplete)
                {
                    TextRate.Text = string.Format("Rate: {0} samples per second", thread.SampleRate);
                }

                IMUTextStatus.Text      = "IMU status:: " + thread.IMUErrorMessage;
                PressureTextStatus.Text = "Pressure status:: " + thread.PressureErrorMessage;
                HumidityTextStatus.Text = "Humidity status:: " + thread.HumidityErrorMessage;
            });
        }
        public RTIMUThread()
        {
            mImu.IMUInit();
            mPressure.PressureInit();
            mHumidity.HumidityInit();

            mStartTime = System.DateTime.Now.Ticks;

            Task.Run(() =>
            {
                while (true)
                {
                    Task.Delay(2);
                    if (mImu.InitComplete)
                    {
                        RTIMUData data;
                        while (mImu.IMURead(out data))
                        {
                            mSampleCount++;

                            // collect all of the data
                            mFusion.NewIMUData(ref data);
                            mHumidity.HumidityRead(ref data);
                            mPressure.PressureRead(ref data);

                            // data is now ready for procesing - just pass to display in this case

                            lock (this) {
                                mImuData = data;
                            }
                        }
                    }

                    if ((System.DateTime.Now.Ticks - mStartTime) >= 10000000)
                    {
                        mStartTime   = System.DateTime.Now.Ticks;
                        mSampleRate  = mSampleCount;
                        mSampleCount = 0;
                    }
                }
            });
        }
示例#3
0
 public static extern void RTIMU_getData(IntPtr imuHandle, out RTIMUData data);