Программирование для Wii

Если у вас есть приставка Wii, то вы можете использовать ее аксессуары для работы с компьютером. Такая возможность доступна благодаря тому, что контроллеры связываются с приставкой через Bluetooth. Энтузиасты стали изучать передаваемые сигналы и написали специальные библиотеки, позволяющие программировать контроллеры. Существует такая библиотека и для C# - это библиотека WiimoteLib, написанная Брайаном Пиком. В этой статье мы рассмотрим базовые возможности библиотеки и напишем тестовые примеры. Изучив предложенные примеры, вы сможете написать собственные приложения, которые расширят арсенал использования контроллеров.

Прежде чем вы начнёте изучать примеры, вам нужно сделать две вещи. Первая - приготовить контроллер Wii Remote (или сокращенно Wiimote). Если данного контроллера у вас нет, то можно приобрести его отдельно, не покупая саму приставку. Второй шаг - подключить Wiimote к компьютеру при помощи Bluetooth-адаптера. Этот процесс описан на сайте Блог технолога.

Подключение библиотеки

Чтобы начать писать свои программы для Wii, необходимо скачать библиотеку WiimoteLib. Далее подключаем ее к проекту  и объявляем при помощи using:


// Подключаем пространство имен WiimoteLib из библиотеки WiimoteLib.dll
using WiimoteLib;

Соединяемся с Wiimote

После подключения библиотеки, у нас появляется возможность соединяться с пультом Wiimote через Bluetooth при помощи метода Connect(). Если мы больше не нуждаемся в соединении с контроллером, то от него следует отключиться при помощи метода Disconnect(). Удобнее это сделать при закрытии программы.


private Wiimote wiimote; // объявляем класс Wiimote
 
// Создаем экземпляр класса Wiimote
wiimote = new Wiimote();

// Подключаемся к пульту
wiimote.Connect();

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // отключаемся от контроллера
    wiimote.Disconnect();
}

Использование вибромоторчика и индикаторов Wiimote

После удачного соединения с контроллером, вы можете управлять им. Например, вы можете включать и выключать вибромоторчик, а также управлять светодиодными индикаторами. Начнем с вибромотора. Для управления вибромотором используется метод SetRumble(). Чтобы включить вибромотор, нужно передать методу значение true, для выключения используется значение false. В ваших руках появился интересный прибор, который можно использовать как игрушку. Если аккуратно положить пульт под плюшевого котенка и дистанционно включить вибромотор, то игрушка оживет и начнет мурлыкать, вызывая восторг у непосвященных.


bool flag = false; // логический флаг для смены состояний true-false

private void butVibrate_Click(object sender, EventArgs e)
{
    flag = !flag; // попеременно меняем значение флага false-true
    
    // включаем и выключаем вибромотор
    wiimote.SetRumble(flag); 
}

Для управления индикаторами используется один из перегруженных методов SetLEDs(). У пульта имеется четыре LED-индикатора. Вы можете включить сразу все индикаторы при помощи команды SetLEDs(4). Аналогично, вы можете включить первые три, два или один индикатор. Если вам нужно включить индикаторы в разном порядке, то используйте вторую версию метода SetLEDs, в котором нужно указать значения true для включаемых индикаторов, и, соответственн, значения false для индикаторов, которые должны оставаться в выключенном состоянии.


private void butLEDS_Click(object sender, EventArgs e)
{
    // включаем первый и третий индикатор
    wiimote.SetLEDs(true, false, true, false);
}
	

Событийная модель

Включать и выключать вибромотор и светодиоды - это, конечно, круто. Но, гораздо интереснее использовать пульт по назначению - управлять программами при помощи кнопок. Пульт Wiimote имеет множество кнопок: A, B, Home, -, +, 1, 2, Вверх, Вниз, Влево, Вправо. При помощи этих кнопок мы можем управлять событиями - выводить сообщения, запускать программу, управлять в самой программе (например, нажимать на паузу при просмотре видео). Таким образом, нам необходимо создать обработчик событий для кнопок, а дальше все зависит от нашей фантазии.


wiimote.WiimoteChanged += new EventHandler<WiimoteChangedEventArgs>(wiimote_WiimoteChanged);

void wiimote_WiimoteChanged(object sender, WiimoteChangedEventArgs e)
{
    WiimoteState ws = e.WiimoteState;
    if (ws.ButtonState.One) // Если нажали кнопку 1
    {
        MessageBox.Show("Вы нажали кнопку 1");
    }

    if (ws.ButtonState.Two)
    {
        System.Diagnostics.Process.Start("notepad.exe"); // запускаем Блокнот
    }
}

Приведенных примеров вполне достаточно, чтобы понять основные приемы программирования для контроллеров Wii. Дальше вы можете сами придумать собственные приложения. Удачи!

Скачать пример к статье - wiiproject.zip

Реклама