示例#1
0
        //Test reading GPS.
        public static void Main6()
        {
            //SerialPort port = new SerialPort("COM7", 9600, Parity.None, 8, StopBits.One);
            //SerialPort port = new SerialPort("COM7", 250000, Parity.None, 8, StopBits.One);
            SerialPort port = new SerialPort("COM12", 57600, Parity.None, 8, StopBits.One);

            SerialPortInterface portInterface = new SerialPortInterface(port);
            portInterface.Open();

            GraphForm lat = new GraphForm("Latitude");
            GraphForm lon = new GraphForm("Longitude");
            lat.Visible = true;
            lon.Visible = true;

            byte var = 0;
            int counter = 0;
            byte[] bytes = new byte[80];

            port.DiscardInBuffer();
            while (true)
            {
                List<byte> bts = new List<byte>();

                while (true)
                {

                    //    bts.Add(portInterface.ReadByte());
                    /*
                    byte[] buff = new byte[34];

                    for (int i = 0; i < 34; i++)
                    {
                        buff[i] = portInterface.ReadByte();
                    }

                    int a = 0;
                    a++;
                    */

                    /**
                     * This is needed to prevent getting out of synch. After a restart
                     * the system could have already transmitted half of the data, so the first message
                     * after a restart will be junk. Then this will snychronize the messages after the first
                     * transmit.
                     */
                    while (portInterface.ReadByte() != 'T')
                    {

                    }

                    //byte bb = 0;
                    //bb = portInterface.ReadByte();
                    //bb = portInterface.ReadByte();
                    //bb = portInterface.ReadByte();

                    int latitude = portInterface.ReadInt();
                    int longitude = portInterface.ReadInt();
                    int positionAcc = portInterface.ReadInt();
                    short fixStatus = portInterface.ReadShort();
                    int x = portInterface.ReadInt();
                    int y = portInterface.ReadInt();
                    int z = portInterface.ReadInt();
                    int b = 0;

                    Console.WriteLine("lat: " + latitude.ToString() + " long: " + longitude.ToString() + " pos acc " + positionAcc.ToString() + " fixStatus " + fixStatus.ToString() + " x: " + x.ToString() + " y: " + y.ToString() + " z " + z.ToString());

                }

            }

            //        /*
            //        bytes = new byte[80];

            //        for (int i = 0; i < 80; i++)
            //        {
            //            var = portInterface.ReadByte();

            //            bytes[i] = var;
            //        }

            //        byte b = 2;
            //         */

            //        /*
            //        var = portInterface.ReadByte();

            //        if (var == 'S')
            //        {
            //            counter = 0;
            //            System.Diagnostics.Debug.WriteLine("Counter " + (bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3]));
            //        }
            //        else if (var == 'B')
            //        {
            //            System.Diagnostics.Debug.WriteLine("Timeout " + ((int)portInterface.ReadByte()).ToString());
            //        }
            //        else
            //        {
            //            bytes[counter++] = var;
            //        }
            //         * */

            //        counter++;
            //        /*byte[] bytes2 = new byte[28];

            //        for (int i = 0; i < 28; i++)
            //        {
            //            var = portInterface.ReadByte();
            //            bytes2[i] = var;
            //        }

            //        int b = 3;
            //        System.Diagnostics.Debug.WriteLine("Counter " + (bytes2[13] << 24 | bytes2[12] << 16 | bytes2[11] << 8 | bytes2[10]));
            //         */

            //        /*
            //        bytes [counter++] = var;

            //        if (counter == 3)
            //        {
            //            counter = 0;
            //            System.Diagnostics.Debug.WriteLine("Counter " + (bytes[0] <<24 | bytes[1] <<16 | bytes[2] << 8 | bytes[3]));
            //        }
            //         */

            //        /*
            //        if (var == 0xB5)
            //        {
            //            System.Diagnostics.Debug.WriteLine("Counter" + counter);
            //            counter = 1;

            //        }

            //        if (counter == 11 | counter == 12 | counter == 13 | counter == 14)
            //        {
            //            bytes[14 - counter] = var;
            //            bytes[counter - 11] = var;
            //        }
            //        if (counter == 15)
            //        {
            //            System.Diagnostics.Debug.WriteLine("Number" + BitConverter.ToInt32(bytes,0));
            //        }

            //        System.Diagnostics.Debug.Write((char)var);
            //         */
            //        /*
            //        if (var == 'S')
            //        {
            //            int bb = portInterface.ReadInt();
            //            System.Diagnostics.Debug.WriteLine(" Int: " + bb.ToString());

            //        }*/
            //    }

            //    while (var != 'S')
            //    {
            //        var = portInterface.ReadByte();
            //    }

            //    Note:The status value might come back as a large value because after restart, the value S gets sent as one of the bytes ruining the synchronization
            //    /*
            //    Read raw lat/long
            //    System.Diagnostics.Debug.WriteLine(portInterface.ReadInt(portInterface));
            //    int rwLat = portInterface.ReadInt(portInterface);
            //    lat.AddValueToGraph(rwLat);

            //    int rwLon = portInterface.ReadInt(portInterface);
            //    lon.AddValueToGraph(rwLon);*/

            //    Read raw messages
            //    var = 0;
            //    short status = portInterface.ReadShort();
            //    System.Diagnostics.Debug.WriteLine("status: " + status); // status
            //    while (var != 'S')
            //    {
            //        var = portInterface.ReadByte();
            //        System.Diagnostics.Debug.Write((char)var);
            //    }

            //    Read xned
            //    System.Diagnostics.Debug.WriteLine(portInterface.ReadFloat().ToString());

            //    Application.DoEvents();
            //}
        }
示例#2
0
        //Test reading barometer.
        public static void Main44()
        {
            double baseAltitudeFeet = 0.0;
            int counter2 = 0;

            double alpha = .15;

            double previousAltitudeFeet = 0.0;
            bool isReady = false;

            SerialPort port = new SerialPort("COM7", 9600, Parity.None, 8, StopBits.One);
            SerialPortInterface portInterface = new SerialPortInterface(port);
            portInterface.Open();

            GraphForm rawTemp = new GraphForm("RawTemp");
            GraphForm rawPress = new GraphForm("RawPress");
            GraphForm temp = new GraphForm("Temp");
            GraphForm press = new GraphForm("Pressure");
            GraphForm alt = new GraphForm("altitude");

            rawTemp.Visible = true;
            rawPress.Visible = true;
            temp.Visible = true;
            press.Visible = true;
            alt.Visible = true;

            while (true)
            {
                int var = 0;
                while (var != 'S')
                {
                    var = portInterface.ReadByte();
                }
                uint rwTemp = portInterface.ReadUInt();
                rawTemp.AddValueToGraph(rwTemp);

                uint rwPress = portInterface.ReadUInt();
                rawPress.AddValueToGraph(rwPress);
                int temperature = portInterface.ReadInt();
                temp.AddValueToGraph(temperature);
                int pressure = portInterface.ReadInt();
                //press.AddValueToGraph(pressure);

                float pressure2 = portInterface.ReadFloat();
                //press.AddValueToGraph(pressure2);

                float zned = portInterface.ReadFloat();
                press.AddValueToGraph(zned);

                Application.DoEvents();

                //altitude equation from: http://www.barnardmicrosystems.com/L4E_FMU_sensors.htm#Pressure
                double altitudemeters = (288.15 / (6.5 / 1000.0)) * (1 - (Math.Pow((pressure / 101325.0), (6.5 / 1000.0) * (287.052 / 9.78))));
                double altitudefeet = altitudemeters * 3.28084;

                //*******note the barometer appears to need more time to settle
                if (counter2 == 40)
                {
                    baseAltitudeFeet = altitudefeet;
                    counter2 = 80;
                }
                else if (counter2 == 80)
                {
                    //do nothing
                }
                else
                {
                    counter2++;
                }

                if (isReady)
                {
                    //Danger *** This algorithm drifts. Sometimes it takes like 10 seconds
                    //or more to stabalize. So you have to wait a long time before you should
                    //read the altitude and set it as the base altitude because of how long it takes.
                    //Also, as the barometer heats up, the altitude changes. This isn't good as the barometer's
                    //temperature will probably change throughout the flight
                    double altitudefeettemp = (double)(altitudefeet - baseAltitudeFeet);
                    altitudefeet = alpha * (altitudefeettemp) + (1 - alpha) * previousAltitudeFeet;
                    previousAltitudeFeet = altitudefeet;

                    alt.AddValueToGraph(altitudefeet);
                }
                else
                {
                    altitudefeet = (double)(altitudefeet - baseAltitudeFeet);
                }

                if (altitudefeet < 20 && altitudefeet != 0)
                {
                    isReady = true;
                }

            }
        }