public static void Main()
        {
            _lcdshield = new DfRobotLcdShield(20, 4);

            // Create a custom degrees symbol (°), store it on the LCD for later use with the lat/long display
            _lcdshield.CreateChar(7, new byte[] { 0x0, 0x4, 0xa, 0x4, 0x0, 0x0, 0x0, 0x0 });

            _thunderbolt = new ThunderBolt("COM1", AngleUnits.Degrees, AltitudeUnits.Meters, new OutputPort(Pins.GPIO_PIN_D13, false));
            _ntpServer = new NtpServer();

            _lcdshield.OnButtonPressed += LcdshieldOnOnButtonPressed;

            DisplaySplash();
            TestLeds();

            _thunderbolt.Open();
            _thunderbolt.TimingMode = TimingModes.UTC;

            Thread.Sleep(1500);

            _ntpServer.Start();

            //_thunderbolt.TimeChanged += ThunderboltOnTimeChanged;

            while (true)
            {
                if (_thunderbolt.IsSerialDataBeingReceived)
                {

                    if (!_isSurveyInProgress && _thunderbolt.IsSurveyInProgress())
                    {
                        // Survey has just started.  Jump to the page displaying survey progress.
                        _previousPageNumber = _pageNumber;  // Take note of the page we were on so we can switch back later.
                        _isSurveyInProgress = true;
                        _pageNumber = 2; // Set the new page to jump to.
                    }
                    else if (_isSurveyInProgress && !_thunderbolt.IsSurveyInProgress())
                    {
                        // Survey has just finished.  Jump to the previous page we were displaying.
                        _pageNumber = _previousPageNumber;
                        _isSurveyInProgress = false;
                    }

                    switch (_pageNumber)
                    {
                        case 1:
                            DisplayScreenOne();
                            break;
                        case 2:
                            DisplayScreenTwo();
                            break;
                        case 3:
                            DisplayScreenThree();
                            break;
                        case 4:
                            DisplayScreenFour();
                            break;
                        case 5:
                            DisplayScreenFive();
                            break;
                        default:
                            DisplayScreenOne();
                            break;
                    }

                    UpdateAlarmIndicators();

                }
                else
                {
                    DisplayNoSerialDataScreen();
                }

                Thread.Sleep(100);

            }
        }
        private static void LcdshieldOnOnButtonPressed(object sender, DfRobotLcdShield.Buttons buttonPressed)
        {
            switch (buttonPressed)
            {
                case DfRobotLcdShield.Buttons.Command1:
                    _thunderbolt.ReceiverMode = ReceiverMode.FullPosition;
                    // Transmit COM 8 Packet ID: BB  Data Length: 40
                    // 00 04 FF 04 02 3E 32 B8 C3 40 80 00 00 41 00 00 00 40 C0 00 00 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

                    break;

                case DfRobotLcdShield.Buttons.Command2:

                    _thunderbolt.ReceiverMode = ReceiverMode.OverDeterminedClock;
                    // Transmit COM 8 Packet ID: BB  Data Length: 40
                    // 00 07 FF 04 02 3E 32 B8 C3 40 80 00 00 41 00 00 00 40 C0 00 00 FF 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

                    break;

                case DfRobotLcdShield.Buttons.Command3:
                    //_thunderbolt.set_survey_params(1, 1, 5);
                    _thunderbolt.start_self_survey();
                    break;

                case DfRobotLcdShield.Buttons.Up:
                    _pageNumber++;
                    if (_pageNumber > 5) { _pageNumber = 1; }
                    _previousPageNumber = _pageNumber;  // Setting this value to override the survey finished change event.
                    break;

                case DfRobotLcdShield.Buttons.Down:
                    _pageNumber--;
                    if (_pageNumber < 1) { _pageNumber = 5; }
                    _previousPageNumber = _pageNumber;  // Setting this value to override the survey finished change event.
                    break;
            }
        }