02 กรกฎาคม 2552

เอาวีโมท(Wiimote)ควบคุม เลโก้เน็ค(Leg...

เอาวีโมท(Wiimote)ควบคุม เลโก้เน็ค(Lego NXT)
ดาวน์โหลด WiimoteControllNXT
หลักการ
    ต่อ wiimote กับคอมพิวเตอร์ผ่าน Bluetooth แล้วอ่านค่าการกดปุ่มด้วย
อีกส่วนหนึ่งคือการต่อ NXT กับ คอมพิวเตอร์ ผ่าน Bluetooth เช่นกัน แล้วควบคุมด้วย AForge.Net library
สิ่งที่ต้องการ
  1. Microsoft Visual C#
  2. AForge.Net
  3. WiimoteLib
Codeที่สำคัญ
เชื่อมต่อกับ NXT
            if (nxt.Connect("COM7"))
            {
                int power;
                nxt.GetBatteryPower(out power);
                System.Diagnostics.Debug.WriteLine(power);
                System.Diagnostics.Debug.WriteLine("Connected successfully ");
            }
            else
            {
                MessageBox.Show("Failed connecting to NXT device", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

เชื่อมต่อกับ wiimote
            wm.WiimoteChanged += new WiimoteChangedEventHandler(wm_WiimoteChanged);
            wm.WiimoteExtensionChanged += new WiimoteExtensionChangedEventHandler(wm_WiimoteExtensionChanged);
            wm.Connect();
การเช็ตค่าให้มอเตอร์ วิ่ง
            NXTBrick.MotorState motorStateGo = new NXTBrick.MotorState();
            WiimoteState ws = args.WiimoteState;
            //set motorState Go
            motorStateGo.Power = (sbyte)127;
            motorStateGo.TurnRatio = (sbyte)50;
            motorStateGo.Mode = NXTBrick.MotorMode.On;// NXTBrick.MotorMode.Brake, NXTBrick.MotorMode.None, NXTBrick.MotorMode.Regulated
            motorStateGo.RunState = runStates[2]; //0:Idle, 1:RampUp, 2:Running, 3:RampDown
การเช็คค่าให้มอเตอร์ หยุด
            NXTBrick.MotorState motorStateStop = new NXTBrick.MotorState();
            //set motorState Stop
            motorStateStop.Power = (sbyte)0;
            motorStateStop.TurnRatio = (sbyte)0;
           
motorStateStop.Mode = NXTBrick.MotorMode.None;//
NXTBrick.MotorMode.Brake, NXTBrick.MotorMode.None,
NXTBrick.MotorMode.Regulated
            motorStateStop.RunState = runStates[0]; //0:Idle, 1:RampUp, 2:Running, 3:RampDown
เมื่อกดปุ่มซ้ายให้มอเตอร์ C หมุน
            if (ws.ButtonState.Left)
            {
                // set motor's state
                if (nxt.SetMotorState(NXTBrick.Motor.C, motorStateGo) != true )
                {
                    System.Diagnostics.Debug.WriteLine("Failed setting motor state");
                }
            }


ไม่มีความคิดเห็น: