Без рубрики 'Подключение Wii Nunchuk к MSX

Подключение Wii Nunchuk к MSX

0 комментов
просмотров
10 мин. на чтение

Getting Connected

While the Wii remote itself is wireless, the Nunchuk was designed to plug into an accessory port at the bottom of the remote. This is actually better for DIY-ers, because it makes it easier to connect to a microcontroller.

To connect to the Nunchuk I purchased a “Nunchuky” breakout board from Adafruit for a cool $3. The Nunchuk’s extension connector snaps right into the board, which exposes the power and data lines so I can plug it into a breadboard. You can also cut the connector off and use the bare wires, but there’s something to be said for keeping the controller intact.

From the Nunchuk’s 6-pin connector, these breakout boards expose 4 pins:

  • Gnd: Ground.
  • 3.3V: VCC
  • Data: SDA, I2C serial data.
  • Clk: SCL, I2C serial clock line.

Of the remaining two pins, one is not-populated on the connector and one is a power return used for controller detection. Unfortunately the breakout doesn’t expose this return pin, but you can solder to it if you need a controller-detect feature for your project.

Data Lines

As it turns out, the communication protocol used by the Nunchuk is none-other than standard I2C! Most microcontrollers have hardware support for I2C, so you can connect the data and clock lines from the Nunchuk directly to the supported pins on the microcontroller.

For the Arduino Uno, Nano, and other 328P-based boards the connection pins for SDA and SCL are A4 and A5, respectively. For the Arduino Leonardo and other 32U4-based boards, you use pins 2 and 3 for data and clock. If you’re not sure which pins to use, do a search for your microcontroller and “I2c”.

If you’re familiar with I2C, note that you do not need to add any pull-up resistors. The Nunchuk already has pull-up resistors onboard. (Or at least it should – some knockoffs are missing them!) You can test the pull up resistors yourself by measuring the resistance between one of the I2C wires and 3V3 while the controller is unplugged.

Voltage Levels

Power is trickier. The Wii remote operates at 3.3V, which means it outputs 3.3V to power the Nunchuk and pulls the I2C lines (data and clock) up to 3.3V when idle. Nunchuks are not designed to work with voltages over 3.3V, and higher voltages may damage the controller. This presents a problem for many Arduinos, the majority of which operate at a 5V logic level.

If your Arduino has a 3.3V regulator / pin, you should use that to power the Nunchuk (connecting to its ‘3V3’ pin). If your Arduino does not have a 3.3V regulator, such as with an Arduino Pro Micro, it’s highly recommended that you use a separate 3.3V regulator to power the Nunchuk.

Similarly, if your Arduino operates at 5V (Uno, Nano, Mega, Leonardo, etc.) and not 3.3V (Due, Zero) you should use a level shifter for the I2C data and clock lines. This prevents the Arduino from pulling the lines to 5V and makes the data stream more reliable. If your Arduino operates at 3.3V you can connect everything directly. (This is one of the reasons I recommend using a Teensy with a Nunchuk).

Важно  Поздравления с наступающим Новым годом 2020

All of that being said, some Nunchuks appear to tolerate 5V. My Nintendo-made Nunchuks seem to work fine with an Uno and 5V power, while the third-party Nunchuks I have flip out and report bad data if the joystick is pushed too close to the edge. Your mileage may vary.

As with any electrical component, using a higher voltage level than expected – if it works at all – will usually lower the lifespan of the part. If your Nunchuk does work perfectly with +5V power, beware that it might fail prematurely.

Reading Nunchuk Data

With the Nunchuk connected to the Arduino it’s time to start reading data from the controller!

Thankfully a lot of smart people have messed around with these Wii extension controllers before me, so there is plenty of information online about how they work. After fighting with most of the existing libraries out there I decided to create my own called NintendoExtensionCtrl, which works with the Nunchuk and a few other controllers. You can download it from GitHub or by using the libraries manager in the Arduino IDE.

Setup and Initialization

Before we can start grabbing data from the controller we need to do a bit of setup. Create a new ‘sketch’ in the Arduino IDE, and at the top the library. Then create a new object that we’re going to call :

Arduino

#include <NintendoExtensionCtrl.h>

Nunchuk nchuk;

1
2
3

#include <NintendoExtensionCtrl.h>
 

Nunchuknchuk;

Now at the start of the function we’re going to initialize the I²C bus used by the Nunchuk by calling . This sets up the microcontroller’s hardware I²C functionality and prepares it to send and receive data from the controller. We’re also going to initialize the bus so we can send mesages back to the PC and see what’s going on:

Arduino

void setup() {
Serial.begin(115200);
nchuk.begin();

5
6
7

voidsetup(){

Serial.begin(115200);

nchuk.begin();

Last but not least we need to ‘connect’ to the controller. This library function initializes the controller in ‘unencrypted’ mode and retrieves the controller’s identity string. If the controller responds back, the function returns ‘true’ and we can start reading data! We’re going to stick this in a loop so that the Arduino keeps trying to talk to the controller until it’s connected, and add a delay so it only tries once per second:

Arduino

while (!nchuk.connect()) {
Serial.println(«Nunchuk not detected!»);
delay(1000);
}
}

9
10
11
12
13

while(!nchuk.connect()){

Serial.println(«Nunchuk not detected!»);

delay(1000);

}

}

Polling for Data

Because the Nunchuk works over the two-wire I2C bus, updates need to be polled from the device. Calling requests 6 bytes of data from the controller. These 6 bytes contain all of the information for the Nunchuk’s controls.

If the update was successful, the function returns ‘true’. If it’s unsuccessful, the function returns ‘false’ and you may need to reconnect to the controller ( function, as above):

Важно  Интернет-радио для детей

Arduino

void loop() {
boolean success = nchuk.update(); // Get new data from the controller

15
16

voidloop(){

booleansuccess=nchuk.update();// Get new data from the controller

After updating with the most recent data, you can then retrieve the state of the Nunchuk’s controls. The library has built-in functions that do all of the bit-shifting and masking for you, and return the data either as an unsigned integer (joysticks / accelerometer) or as a boolean (button):

Arduino

if(success == true) { // We have new data!
nunchuk.update();

nunchuk.joyX(); // 0 — 255
nunchuk.joyY();

nunchuk.accelX(); // 0 — 1023
nunchuk.accelY();
nunchuk.accelZ();

nunchuk.buttonZ(); // 1 = On
nunchuk.buttonC();
}
}

18
19
20
21
22
23
24
25
26
27
28
29
30
31

if(success==true){// We have new data!

nunchuk.update();

nunchuk.joyX();// 0 — 255

nunchuk.joyY();

nunchuk.accelX();// 0 — 1023

nunchuk.accelY();

nunchuk.accelZ();

nunchuk.buttonZ();// 1 = On

nunchuk.buttonC();

}

}

For more examples of how these functions are used, check out the ‘Nunchuk_Demo’ example from the library.

Using Multiple Nunchuks

This is all fine-and-dandy for using a single controller, but what if you want to use two or more Nunchuks?

This is possible, but unfortunately it isn’t quite as easy. The system was designed to only use one device per Wii remote, and the limitation here is the I2C address.

The I2C bus used by the Nunchuk (and other extension controllers) is addressable. This means that it’s possible to have dozens of devices all communicating on the same bus using just two wires. To talk to a specific device the controller makes a request to that address. This is the problem, as all Wii extension controllers have the same address – . If you put two controllers on the same bus, they will both try to respond at the same time and you’ll have a conflict.

The solution is to use two I2C buses. Or, if you only have one bus on the microcontroller, to use an I2C multiplexer like the TCA9548A. Adafruit sells a nice breakout that works well. I’m currently using this multiplexer to have two Nunchuks work on an Arduino Pro Micro. It also conveniently acts as a level-shifter!

Wii Remote

Wiimote связывается с приставкой через Bluetooth-соединение.
Wii Remote снабжен встроенным акселерометром, инфракрасным датчиком, динамиком, механизмом вибрации
и даже небольшим объемом памяти для хранения профиля пользователя!

По сути, Wii Remote – это ключевой компонент приставки Wii. С помощью акселерометра пользователь получает
уникальную возможность управлять игрой, наклоняя Wii Remote в разные стороны. Например, играя в одну из гоночных игр,
вы можете управлять машиной посредством наклонения Wii Remote в одну из сторон, а играя в бейсбол или теннис – махать
Wii Remote как битой или теннисной ракеткой. В свою очередь, инфракрасный датчик позволяет наводить прицел на цель,
и в этом случае играть в один из шутеров от первого лица становится действительно интересно. Здесь нужно заметить,
что в комплекте с приставкой поставляется сенсорная панель (Sensor Bar),
которая крепится в непосредственной близости от экрана телевизора.
С ее помощью приставка взаимодействует с пультом Wiimote, позволяя добиваться реалистичности в играх.

Встроенный в Wii Remote динамик и механизм вибрации добавляют в игру еще больше реальности.
Например, если вы играете в теннис и имитируете удар ракеткой по мячу,
то вы обязательно услышите характерный звук из динамика и почувствуете вибрацию от Wii Remote.
Соответственно, в разных играх присутствуют разные звуки, а степень силы удара
(степень быстроты и резкости замаха и имитации удара Wii Remote) отразится на мощности вибрации.
Еще одним очень важным компонентом Wii Remote является встроенная в него память,
которая может хранить все пользовательские данные об игроке. То есть фактически вы имеете свой именной Wii Remote.
В этом плане ничто
вам не мешает взять Wii Remote с собой и прийти в гости к другу со своим «именным орудием игры»
(к одной приставке можно подключить до четырех Wii Remote). А поскольку все пользовательские данные привязаны к профилю
игрока, то все ваши достижения будут сохранены в вашем Wii Remote.
Официально профиль игрока имеет название Mii.

Важно  Прикольные поздравления с днем рождения женщине

Передняя часть Wii Remote

Рассмотрим переднюю часть Wii Remote.

  1. Приемопередатчик сигнала между Wii Remote и приставкой Wii
  2. Кнопка POWER для включения и выключения приставки Wii. Чтобы
    выключить приставку, необходимо нажать эту кнопку и удерживать ее
    в течение нескольких секунд.
  3. Крестовина, используется для работы с меню приставки и для управления в играх
  4. Кнопка с изображением символа А. Обычно эта
    кнопка используется для подтверждения каких-либо действий в меню приставки или игры,
    а также она очень часто применяется в играх, где ее
    функциональность определена самой игрой
  5. Кнопки с изображением знаков «–» и «+». Эти кнопки также используются в играх, а также в меню игр и самой приставки.
  6. Кнопка HOME. С помощью этой кнопки вызывается специальное диалоговое окно,
    через которое можно вернуться в главное меню приставки
  7. Встроенный динамик
  8. Кнопка с цифрой 1. Используется в играх, ее назначение определяется игрой
  9. Кнопка с цифрой 2. Используется в играх, ее назначение определяется игрой
  10. Четыре светодиодных индикатора, которые показывают количество подключенных
    Wii Remote к одной приставке Wii

Задняя часть

Теперь рассмотрим Wii Remote с обратной стороны.

  1. Кнопка с изображением буквы В. Как правило, эта кнопка используется для отмены каких-либо действий в меню
    приставки или игры, а также она очень часто применяется в играх, где ее
    функциональность определяется уже самой игрой.
  2. Кнопка SYNC, или кнопка синхронизации Wii
    Remote с приставкой Wii. При первом включении консоли, а также когда
    соединение между Wii и Wii Remote было прервано, вы можете использовать эту
    кнопку для синхронизации двух устройств между собой.
  3.  Крышка отсека для батареек.
  4.  Отверстие для подсоединения защитного ремешка, чтобы во время игры Wii Remote случайно не
    вылетел из руки. Советую серьезно отнестить к этому акссессуару и всегда
    использовать ремешок во время игры.
  5.  Защитный ремешок.
  6.  Приспособление для регулировки натяжения ремешка на руке.

Пульт Wii Remote работает от двух пальчиковых
батареек.

Оцените статью
Понравилась статья?
Комментарии (0)
Комментариев нет, будьте первым кто его оставит
Добавить комментарий
Ваш e-mail не будет опубликован. Обязательные поля помечены *