/// <summary>
        /// This method restore to initial state (main menu)
        /// </summary>
        private void RestoreInitialState()
        {
            _menu              = 0;
            _menuState         = MENU_STATE.initial;
            _servoState        = SERVO_STATE.close;
            _secretState       = SECRET_CODE.up1;
            _scanCardState     = SCAN_CARD_STATE.waitRFID;
            _addCardState      = ADD_CARD_STATE.waitRFID;
            _displayCardsState = DISPLAY_CARDS_STATE.listIsEmpty;
            _deleteCardState   = DELETE_CARD_STATE.listIsEmpty;

            // Refresh the LCD text fields
            LCDTextFields.Content         = Card.DEFAULT_NAME;
            LCDTextFields.CursorPosition  = 0;
            LCDTextFields.ShouldBeRefresh = true;

            DeleteCurrentBadgescan();
            LCD.GetInstance().Clear();
            DisplayMainMenu(_menu);
        }
        /// <summary>
        /// When no menu is selected
        /// </summary>
        private void InitialState()
        {
            switch (_scanCardState)
            {
            case SCAN_CARD_STATE.waitRFID:
                if (RFIDReader.GetInstance().IsBadgeScan)
                {
                    _scanCardState = SCAN_CARD_STATE.RFIDDetected;
                }
                break;

            case SCAN_CARD_STATE.RFIDDetected:
                if (_servoState == SERVO_STATE.close)     // If the servo is lock
                {
                    bool isValid = ListOfCards.GetInstance().FindCardInlist(RFIDReader.GetInstance().CurrentUid);
                    if (isValid)
                    {
                        _scanCardState = SCAN_CARD_STATE.RFIDValid;
                    }
                    else
                    {
                        _scanCardState = SCAN_CARD_STATE.RFIDInvalid;
                    }
                }
                else
                {
                    _scanCardState = SCAN_CARD_STATE.RFIDInvalid;
                }
                break;

            case SCAN_CARD_STATE.RFIDValid:
                _servoState    = SERVO_STATE.open;
                _scanCardState = SCAN_CARD_STATE.waitRFID;
                DeleteCurrentBadgescan();
                break;

            case SCAN_CARD_STATE.RFIDInvalid:
                _servoState    = SERVO_STATE.close;
                _scanCardState = SCAN_CARD_STATE.waitRFID;
                DeleteCurrentBadgescan();
                break;

            default:
                _scanCardState = SCAN_CARD_STATE.waitRFID;
                break;
            }

            switch (_servoState)
            {
            case SERVO_STATE.open:
                ServoMotor.GetInstance().Unlock();
                _secuTimer.Start();
                break;

            case SERVO_STATE.close:
                ServoMotor.GetInstance().Lock();
                _secuTimer.Stop();
                break;

            default:
                _servoState = SERVO_STATE.close;
                break;
            }

            if (_joystickX.Read() > JOYSTICK_DOWN_LEFT) // If the joystick is down
            {
                _menu++;
                if (_menu > 4)
                {
                    _menu = 0;
                }
                DisplayMainMenu(_menu);                     // It is not removed from the test to prevent the lcd flashing
                Thread.Sleep(100);                          // Wait 0.1 second to prevent the menu from scrolling too fast
            }
            else if (_joystickX.Read() < JOYSTICK_UP_RIGHT) // The joystick is up
            {
                _menu--;
                if (_menu < 0)
                {
                    _menu = 4;
                }
                DisplayMainMenu(_menu); // It is not removed from the test to prevent the lcd flashing
                Thread.Sleep(100);      // Wait 0.1 second to prevent the menu from scrolling too fast
            }
        }