示例#1
0
        protected void NotifyHeadingChanged(double heading, double headingCorrection)
        {
            var args = new HeadingChangedEventArgs()
            {
                Heading = heading, HeadingCorrection = headingCorrection
            };

            HeadingChanged?.Invoke(this, args);
        }
        public void Interpret(byte [] data)
        {
            int currentIndex = 0;

            X.raw         = BitConverter.ToInt16(data, currentIndex);
            currentIndex += sizeof(Int16);
            Y.raw         = BitConverter.ToInt16(data, currentIndex);
            currentIndex += sizeof(Int16);
            Z.raw         = BitConverter.ToInt16(data, currentIndex);
            currentIndex += sizeof(Int16);

            X.max = Math.Max(X.max, X.raw);
            Y.max = Math.Max(Y.max, Y.raw);
            Z.max = Math.Max(Z.max, Z.raw);

            X.min = Math.Min(X.min, X.raw);
            Y.min = Math.Min(Y.min, Y.raw);
            Z.min = Math.Min(Z.min, Z.raw);

            //offset XY
            Int16 centerX = (Int16)((X.max + X.min) / 2);
            Int16 centerY = (Int16)((Y.max + Y.min) / 2);
            Int16 centerZ = (Int16)((Z.max + Z.min) / 2);

            if (Math.Abs(X.raw) > MaxValueX)
            {
                MaxValueX = Math.Abs(X.raw);
            }
            if (Math.Abs(Y.raw) > MaxValueY)
            {
                MaxValueY = Math.Abs(Y.raw);
            }
            if (Math.Abs(Z.raw) > MaxValueZ)
            {
                MaxValueZ = Math.Abs(Z.raw);
            }

            GraphXY.AbsoluteMaxValue = Math.Max(MaxValueX, MaxValueY);
            GraphXZ.AbsoluteMaxValue = Math.Max(MaxValueX, MaxValueZ);
            GraphYZ.AbsoluteMaxValue = Math.Max(MaxValueY, MaxValueZ);


            if (IsScaled)
            {
                X.raw = (Int16)(X.raw - centerX);
                Y.raw = (Int16)(Y.raw - centerY);

                Console.WriteLine($"{centerX} {centerY}");
                GraphXY.AddPoint(X.raw, Y.raw);
                GraphXZ.AddPoint(X.raw, Z.raw);
                GraphYZ.AddPoint(Y.raw, Z.raw);
            }

            else
            {
                GraphXY.AddPoint(X.raw, Y.raw);
                GraphXZ.AddPoint(X.raw, Z.raw);
                GraphYZ.AddPoint(Y.raw, Z.raw);
            }

            double heading = Math.Atan2(Y.raw, X.raw) * 180.0 / Math.PI;

            HeadingChanged?.Invoke(heading);
        }
示例#3
0
 private void Compass_ReadingChanged(Compass sender, CompassReadingChangedEventArgs args)
 {
     DispatcherHelper.CheckBeginInvokeOnUI(() => HeadingChanged?.Invoke(args));
 }