Я работаю над проектом, пытающимся использовать wiimote для управления роботизированной рукой.Но сначала я хочу протестировать wiimote в c #.По сути, я хочу, чтобы мой wiimote обновлялся каждый раз, когда я нажимал кнопку, и имел графический интерфейс, который отображал, какая кнопка была нажата в списке флажков.Но когда я запускаю свой код и нажимаю кнопку, окно формы закрывает программу.Я пытался разобраться в этой проблеме несколько часов, но все еще застрял.
Wiimote wm = new Wiimote();
public Wiimote1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
wm.WiimoteChanged += wm_WiimoteChanged;
wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged;
wm.Connect();
wm.SetReportType(InputReport.IRAccel, true);
wm.SetLEDs(true, false, false, false);
}
private void wm_WiimoteExtensionChanged(object sender, WiimoteExtensionChangedEventArgs args)
{
if (args.Inserted)
wm.SetReportType(InputReport.IRExtensionAccel, true);
else
wm.SetReportType(InputReport.IRAccel, true);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
wm.Disconnect();
}
private void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args)
{
WiimoteState wmi = args.WiimoteState;
buttonA = wmi.ButtonState.A;
buttonB = wmi.ButtonState.B;
buttonHome = wmi.ButtonState.Home;
buttonOne = wmi.ButtonState.One;
buttonTwo = wmi.ButtonState.Two;
buttonPlus = wmi.ButtonState.Plus;
buttonMinus = wmi.ButtonState.Minus;
buttonUp = wmi.ButtonState.Up;
buttonDown = wmi.ButtonState.Down;
buttonLeft = wmi.ButtonState.Left;
buttonRight = wmi.ButtonState.Right;
AccelX = wmi.AccelState.Values.X.ToString();
AccelY = wmi.AccelState.Values.Y.ToString();
AccelZ = wmi.AccelState.Values.Z.ToString();
switch (wmi.ExtensionType)
{
case ExtensionType.Nunchuk:
nunC = wmi.NunchukState.C;
nunZ = wmi.NunchukState.Z;
nunAccelX = wmi.NunchukState.AccelState.Values.X.ToString();
nunAccelY = wmi.NunchukState.AccelState.Values.Y.ToString();
JoyStickX = wmi.NunchukState.Joystick.X.ToString();
JoyStickY = wmi.NunchukState.Joystick.Y.ToString();
break;
case ExtensionType.ClassicController:
clsA = wmi.ClassicControllerState.ButtonState.A;
clsB = wmi.ClassicControllerState.ButtonState.B;
clsX = wmi.ClassicControllerState.ButtonState.X;
clsY = wmi.ClassicControllerState.ButtonState.Y;
clsPlus = wmi.ClassicControllerState.ButtonState.Plus;
clsMinus = wmi.ClassicControllerState.ButtonState.Minus;
clsHome = wmi.ClassicControllerState.ButtonState.Home;
clsUp = wmi.ClassicControllerState.ButtonState.Up;
clsDown = wmi.ClassicControllerState.ButtonState.Down;
clsLeft = wmi.ClassicControllerState.ButtonState.Left;
clsRight = wmi.ClassicControllerState.ButtonState.Right;
clsTriggerL = wmi.ClassicControllerState.ButtonState.TriggerL;
clsTriggerR = wmi.ClassicControllerState.ButtonState.TriggerR;
clsZL = wmi.ClassicControllerState.ButtonState.ZL;
clsZR = wmi.ClassicControllerState.ButtonState.ZR;
break;
}
checkList();
}
private void checkList()
{
checkedListBox1.SetItemChecked(0, buttonA);
checkedListBox1.SetItemChecked(1, buttonB);
checkedListBox1.SetItemChecked(2, buttonMinus);
checkedListBox1.SetItemChecked(3, buttonPlus);
checkedListBox1.SetItemChecked(4, buttonHome);
checkedListBox1.SetItemChecked(5, buttonOne);
checkedListBox1.SetItemChecked(6, buttonTwo);
checkedListBox1.SetItemChecked(7, buttonUp);
checkedListBox1.SetItemChecked(8, buttonDown);
checkedListBox1.SetItemChecked(9, buttonRight);
checkedListBox1.SetItemChecked(10, buttonLeft);
}