Exemple #1
0
        private void FJoystick_Check_Data()
        {
            #region JoyStick
            // [ 아래는 XBox 기준이다. ]
            // 스틱좌상단, 0+ - 좌, 1+ - 하
            // 패드 2+ - 좌, 3+ - 하
            // 스틱우하단, 4+ - 좌, 5+ - 하
            // 버튼
            // Top 6 - -3 : 클릭
            // Left 7 - -3 : 클릭
            // Right 8 - -3 : 클릭
            // Bottom 9 - -3 : 클릭
            // 전면우측 10 - -3 : 클릭
            // 전면좌측 11 - -3 : 클릭
            // 전면우측아래 12- : 클릭
            // 전면좌측아래 13- : 클릭

            if (m_CJoy.IsValid == true)
            {
                //// 좌상단 조이스틱
                if (Math.Abs(m_CJoy.dX0 - 0.5) > 0.2)
                {
                    if (m_CTmr_Throat.Get() > 100)
                    {
                        double dData = (double)Math.Abs(m_CJoy.dX0 - 0.5);
                        if (dData > 0)
                        {
                            //1448 +- 300
                            double dValue  = 1448 + (dData * 2) * 300;// (dData * 2) * 100.0;
                            int    nValue2 = (int)((dData * 2) * 65535);
                            nValue2 = (nValue2 != 0) ? 1 : 0;
                            Ojw.CMessage.Write("Data = {0}", dValue);
                            SendValue(1, nValue2, 1, nValue2, 1, (int)dValue, 1, (int)dValue, 1, (int)dValue);
                        }
                        else
                        {
                            //SendValue(0, 0, 0, 0, 1, 0, 1, 0, 1, 0);
                        }
                        m_CTmr_Throat.Set();
                    }

                    m_C3d.SetData(1, (float)((m_CJoy.dX0 - 0.5) / 5.0 * 10.0));
                    m_C3d.SetData(2, (float)((m_CJoy.dX0 - 0.5) / 5.0 * 10.0));
                }
                else
                {
                    if (m_CTmr_Throat.Get() > 100)
                    {
                        m_CTmr_Throat.Set();
                    }
                    m_C3d.SetData(1, 0);
                    m_C3d.SetData(2, 0);
                }
                if (Math.Abs(m_CJoy.dY1 - 0.5) > 0.2)
                {
                    m_C3d.SetData(0, (float)10.0f);                                  //((m_CJoy.dY0 - 0.5) / 5.0 * 10.0));
                }
                else
                {
                    m_C3d.SetData(0, 0);
                }
#if _XBOX //
                int nValue = 65535;
                if (m_CJoy.IsDown_Event(Ojw.CJoystick.PadKey.Button5) == true)
                //if (m_CJoy.IsDown_Event(Ojw.CJoystick.PadKey.Button7) == true)
                {
                    //m_CSocket.Send(Ojw.CConvert.StrToBytes("0"));
                    m_C3d.SetColor_Second(0, 4, 4, 0, Color.Cyan);
                    //nRight = 100;
                    //Ojw.CMessage.Write("Clicked 9");
                    Ojw.CMessage.Write("Light Right 100");
                    SendValue(1, nValue, 1, nValue, 0, 0, 0, 0, 0, 0);
                }
                else if (m_CJoy.IsUp_Event(Ojw.CJoystick.PadKey.Button5) == true)
                {
                    //nRight = 0;
                    m_C3d.SetColor_Second(0, 4, 4, 0, Color.Black);
                    Ojw.CMessage.Write("Light Right off");
                    SendValue(1, 0, 1, 0, 0, 0, 0, 0, 0, 0);
                }
                if (m_CJoy.IsDown_Event(Ojw.CJoystick.PadKey.Button6) == true)
                //if (m_CJoy.IsDown_Event(Ojw.CJoystick.PadKey.Button8) == true)
                {
                    //nLeft = 100;
                    m_C3d.SetColor_Second(1, 5, 5, 0, Color.Cyan);
                    //m_CSocket.Send(Ojw.CConvert.StrToBytes("1"));
                    Ojw.CMessage.Write("Light Left 100");
                    //Ojw.CMessage.Write("Clicked 10");
                    SendValue(1, nValue, 1, nValue, 0, 0, 0, 0, 0, 0);
                }
                else if (m_CJoy.IsUp_Event(Ojw.CJoystick.PadKey.Button6) == true)
                {
                    //nLeft = 0;
                    m_C3d.SetColor_Second(1, 5, 5, 0, Color.Black);
                    Ojw.CMessage.Write("Light Left off");
                    SendValue(1, 0, 1, 0, 0, 0, 0, 0, 0, 0);
                }
#else
                if (m_CJoy.IsDown_Event(Ojw.CJoystick.PadKey.Button7) == true)
                {
                    m_C3d.SetColor_Second(0, 4, 4, 0, Color.Cyan);
                    Ojw.CMessage.Write("Clicked 9");
                    SendValue(1, 100, 0, 0, 0, 0, 0, 0);
                }
                else if (m_CJoy.IsUp_Event(Ojw.CJoystick.PadKey.Button7) == true)
                {
                    m_C3d.SetColor_Second(0, 4, 4, 0, Color.Black);
                    SendValue(1, 0, 0, 0, 0, 0, 0, 0);
                }
                if (m_CJoy.IsDown_Event(Ojw.CJoystick.PadKey.Button8) == true)
                {
                    m_C3d.SetColor_Second(1, 5, 5, 0, Color.Cyan);
                    Ojw.CMessage.Write("Clicked 10");
                    SendValue(0, 0, 1, 100, 0, 0, 0, 0);
                }
                else if (m_CJoy.IsUp_Event(Ojw.CJoystick.PadKey.Button8) == true)
                {
                    m_C3d.SetColor_Second(1, 5, 5, 0, Color.Black);
                    SendValue(0, 0, 1, 0, 0, 0, 0, 0);
                }
#endif
                // 이 부분이 어떤 버튼이 눌리는지를 화면상에 뿌려준다.
                for (int i = 0; i < 30; i++)
                {
                    if (m_CJoy.IsDown_Event((Ojw.CJoystick.PadKey)i) == true)
                    {
                        Ojw.CMessage.Write("Button Down{0}", i);
                    }
                    if (m_CJoy.IsUp_Event((Ojw.CJoystick.PadKey)i) == true)
                    {
                        Ojw.CMessage.Write("Button Up{0}", i);
                    }
                }
            }
            #endregion JoyStick
        }
        private void pad_check_data()
        {
            double mecFB  = 0;
            double mecRL  = 0;
            double mecT   = 0;
            int    inside = 0;

            if (mecanumMode == true)//메카넘모드일때
            {
                if (pad.dY1 > 0.52 | pad.dY1 < 0.48)
                {
                    mecFB = -(pad.dY1 - 0.5) * mecanumSpeed * mecanumAdd;
                }
                if (pad.dX1 > 0.52 | pad.dX1 < 0.48)
                {
                    mecRL = (pad.dX1 - 0.5) * mecanumSpeed * mecanumAdd;
                }

                /*if (pad.dX0 > 0.55 | pad.dX0 < 0.45)
                 * {
                 *  mecT = (pad.dX0 - 0.5) * mecanumSpeed * mecanumAdd;
                 *  light = true;
                 * }*/
                if (pad.Slide > 0.52 | pad.Slide < 0.48)
                {
                    mecT = -(pad.Slide - 0.5) * mecanumSpeed * mecanumAdd;
                }
                if (pad.dX0 > 0.52 | pad.dX0 <0.48 | pad.dY0> 0.52 | pad.dY0 < 0.48)
                {
                    mecFB = -(pad.dY0 - 0.5) * mecanumSpeed * mecanumAdd2;
                    mecT  = (pad.dX0 - 0.5) * mecanumSpeed * mecanumAdd2;

                    /*if (mecFB < 0)
                     * {
                     *  mecT = -mecT;
                     * }*/
                }

                if (pad.IsDown(Ojw.CJoystick.PadKey.Button1) == true)
                {
                    // A   보정 기능
                    inside = 100;
                }

                if (pad.IsDown(Ojw.CJoystick.PadKey.POVUp) == true) //위 버튼
                {
                    mecFB = mecanumSpeed;
                }
                else if (pad.IsDown(Ojw.CJoystick.PadKey.POVDown) == true) //아래 버튼
                {
                    mecFB = -mecanumSpeed;
                }
                if (pad.IsDown(Ojw.CJoystick.PadKey.POVRight) == true)
                {
                    mecRL = mecanumSpeed;
                }
                else if (pad.IsDown(Ojw.CJoystick.PadKey.POVLeft) == true)
                {
                    mecRL = -mecanumSpeed;
                }

                motor.Set_Turn(30, (int)(-mecFB + mecRL + mecT - inside));
                motor.Set_Turn(31, (int)(-mecFB - mecRL + mecT + (2 * inside)));
                motor.Set_Turn(32, (int)(mecFB - mecRL + mecT - (2 * inside)));
                motor.Set_Turn(33, (int)(mecFB + mecRL + mecT + inside));

                motor.Send_Motor(10);
                motor.Wait(10);
            }
            else//걷기모드일때
            {
                if (!walking) //걷고있지 않을때
                {
                    if (pad.IsDown_Event(Ojw.CJoystick.PadKey.POVUp) == true) //위 버튼
                    {
                        btnWalkFront_Click(null, null);
                    }
                    else if (pad.IsDown_Event(Ojw.CJoystick.PadKey.POVDown) == true) //아래 버튼
                    {
                        btnWalkBack_Click(null, null);
                    }
                    else if (pad.IsDown_Event(Ojw.CJoystick.PadKey.POVRight) == true)
                    {
                        btnWalkTurnRight_Click(null, null);
                    }
                    else if (pad.IsDown_Event(Ojw.CJoystick.PadKey.POVLeft) == true)
                    {
                        btnWalkTurnLeft_Click(null, null);
                    }
                    //X버튼
                    if (pad.IsDown_Event(Ojw.CJoystick.PadKey.Button3) == true)
                    {
                        btnStairLeft_Click(null, null);
                    }
                    if (pad.IsDown_Event(Ojw.CJoystick.PadKey.Button4) == true)
                    {
                        btnStairRight_Click(null, null);
                    }
                }
                //B 버튼
                if (pad.IsDown(Ojw.CJoystick.PadKey.Button2) == true)
                {
                    btnWalkStop_Click(null, null);
                }
            }
            //왼쪽 트리거 버튼
            if (pad.IsDown_Event(Ojw.CJoystick.PadKey.Button5) == true) // 보행 모드
            {
                if (mecanumMode == true)                                //메카넘 모드일때
                {
                    btnTransformToWalk_Click(null, null);
                }
                else
                {
                    btnStandPose_Click(null, null);
                }
            }
            //오른쪽 트리거 버튼
            if (pad.IsDown_Event(Ojw.CJoystick.PadKey.Button6) == true) // 메카넘 모드 버튼
            {
                if (mecanumMode == false)                               //보행 모드일때
                {
                    btnTransformToMecanum_Click(null, null);
                }
                else
                {
                    btnMecanumPose_Click(null, null);
                }
            }
            if (pad.IsDown_Event(Ojw.CJoystick.PadKey.Button7) == true)
            {
                // BACK
                motor.SetTorq(false);
            }
            if (pad.IsDown_Event(Ojw.CJoystick.PadKey.Button8) == true)
            {
                // START
                motor.SetTorq(true);
            }
        }