前編からの続き
必要なもの・0.96 inch OLED ディスプレイ(SSD1306 128×64 I2C)・LGT8F328P-SSOP20 (Arduino 互換機)・自作ゲームパッド (タクトスイ
前回は、画面の表示までです。その状態でもゲームの画面を表示することは可能だと思います。今回で完成で、ゲームパットとスピーカーをつけます。ピン配置を変更してるのでソースの変更も必要です。
使用するもの
・0.96 inch OLED ディスプレイ(SSD1306 128×64 I2C)
・LGT8F328P-SSOP20 (Arduino 互換機)
・自作ゲームパッド (タクトスイッチ)
・圧電スピーカー
ArduBoyライブラリの変更
「#ifdef SLIMBOY」を目安に、修正箇所を探すとよいかも。
Arduboy2Core.h
\Arduboy2-master\src\Arduboy2Core.h
3か所修正します。
↓ LED関係のピン番号指定 A5
#ifdef SLIMBOY
#define RED_LED A5 /**< The pin number for the red color in the RGB LED. */
#define GREEN_LED A5 /**< The pin number for the greem color in the RGB LED. */
#define BLUE_LED A5 /**< The pin number for the blue color in the RGB LED. */
#define RED_LED_PORT PORTC
#define RED_LED_BIT PORTC5
#define GREEN_LED_PORT PORTC
#define GREEN_LED_BIT PORTC5
#define BLUE_LED_PORT PORTC
#define BLUE_LED_BIT PORTC5
#else
↑ LED関係のピン番号指定 A5
LED関係。いろいろ変更してみたが、これ以外だとうまく行かないので・・。これでOKだとは思えないが・・。
↓ ゲームパッドのピン番号指定 6 7 2 4 A0 A1
#ifdef SLIMBOY
#define PIN_LEFT_BUTTON 6
#define LEFT_BUTTON_PORT PORTD
#define LEFT_BUTTON_PORTIN PIND
#define LEFT_BUTTON_DDR DDRD
#define LEFT_BUTTON_BIT PORTD6
#define PIN_RIGHT_BUTTON 7
#define RIGHT_BUTTON_PORT PORTD
#define RIGHT_BUTTON_PORTIN PIND
#define RIGHT_BUTTON_DDR DDRD
#define RIGHT_BUTTON_BIT PORTD7
#define PIN_UP_BUTTON 2
#define UP_BUTTON_PORT PORTD
#define UP_BUTTON_PORTIN PIND
#define UP_BUTTON_DDR DDRD
#define UP_BUTTON_BIT PORTD2
#define PIN_DOWN_BUTTON 4
#define DOWN_BUTTON_PORT PORTD
#define DOWN_BUTTON_PORTIN PIND
#define DOWN_BUTTON_DDR DDRD
#define DOWN_BUTTON_BIT PORTD4
#define PIN_A_BUTTON A0
#define A_BUTTON_PORT PORTC
#define A_BUTTON_PORTIN PINC
#define A_BUTTON_DDR DDRC
#define A_BUTTON_BIT PORTC0
#define PIN_B_BUTTON A1
#define B_BUTTON_PORT PORTC
#define B_BUTTON_PORTIN PINC
#define B_BUTTON_DDR DDRC
#define B_BUTTON_BIT PORTC1
#else
↑ ゲームパッドのピン番号指定 6 7 2 4 A0 A1
ゲームパッドのピン配置です。ここを修正すると、Arduboy2Core.cppのほうも修正する必要があります。
↓ スピーカー関係のピン番号 9、17
#ifdef SLIMBOY
#define PIN_SPEAKER_1 9 /**< The pin number of the first lead of the speaker */
#define PIN_SPEAKER_2 17 /**< The pin number of the second lead of the speaker */
#define SPEAKER_1_PORT PORTB
#define SPEAKER_1_DDR DDRB
#define SPEAKER_1_BIT PORTB1
#define SPEAKER_2_PORT PORTC
#define SPEAKER_2_DDR DDRC
#define SPEAKER_2_BIT PORTC3
#else
↑ スピーカー関係のピン番号 9、17
スピーカー関係のピン配置です。
Arduboy2Core.cpp
\Arduboy2-master\src\Arduboy2Core.cpp
ゲームパッドのピン配置関連です。bootPins()関数の部分を変更します。
void Arduboy2Core::bootPins()
{
#ifdef SLIMBOY
// Port C INPUT_PULLUP
PORTC |= _BV(A_BUTTON_BIT) |
_BV(B_BUTTON_BIT);
DDRC &= ~(_BV(A_BUTTON_BIT) |
_BV(B_BUTTON_BIT));
// Port D INPUT_PULLUP
PORTD |= _BV(LEFT_BUTTON_BIT) |
_BV(RIGHT_BUTTON_BIT) |
_BV(UP_BUTTON_BIT) |
_BV(DOWN_BUTTON_BIT);
DDRD &= ~(_BV(LEFT_BUTTON_BIT) |
_BV(RIGHT_BUTTON_BIT) |
_BV(UP_BUTTON_BIT) |
_BV(DOWN_BUTTON_BIT));
#else
LED関係は使わないので、記述からも削除しました。
EEPROM.update 関係
LGT8F328Pというボードは、調べる限りでは、EEPROMをサポートしてないようです。ボードを「Arduino Pro or Pro Mini」にすると、エラーなくコンパイルが通りますが、どうもこの部分が動作してないように思います。
ということで、コメントアウト(コメント化)することにしました。もし必要なら、保存方法を考えて別のロジックにかきかえればよいかと思います。
Arduboy2.cpp(114): // EEPROM.update(EEPROM_AUDIO_ON_OFF, eeVal); Arduboy2.cpp(1096): // EEPROM.update(EEPROM_UNIT_ID, (uint8_t)(id & 0xff)); Arduboy2.cpp(1097): // EEPROM.update(EEPROM_UNIT_ID + 1, (uint8_t)(id >> 8)); Arduboy2.cpp(1131): // EEPROM.update(dest, done ? 0x00 : name[src]); Arduboy2.cpp(1146): // EEPROM.update(EEPROM_SYS_FLAGS, flags); Arduboy2.cpp(1159): // EEPROM.update(EEPROM_SYS_FLAGS, flags); Arduboy2.cpp(1172): // EEPROM.update(EEPROM_SYS_FLAGS, flags); Arduboy2Audio.cpp(46): // EEPROM.update(EEPROM_AUDIO_ON_OFF, audio_enabled);
上記の8か所をコメントアウトします。
コメントアウト前(修正前)
EEPROM.update(EEPROM_AUDIO_ON_OFF, eeVal);
コメントアウト(修正後)
// EEPROM.update(EEPROM_AUDIO_ON_OFF, eeVal);
行頭に「//」をつけると、その部分はコメント扱いになります。
※補足
EEPROM.write()はサポートされてるようなので、 EEPROM.write()に置き換えてやると良いのかも。
コンパイル時のボード指定
今後は、ボードに「LGT8F328P-SSOP20」を指定してコンパイルすることにします。その方がたぶん動作も安定するでしょう。
ゲームパッドの接続
Gamepad | LGT8F328P | |
1 | UP | 2 |
2 | DOWN | 4 |
3 | LEFT | 6 |
4 | RIGHT | 7 |
5 | B BUTTON | A1 |
6 | A BUTTON | A0 |
7 | GND | GND |
ソース変更とペアーです。両方合わせてください。
ゲームパッドの動作確認
ArduBoy2ライブラリのサンプルスケッチButtonsで動作確認します。
画面中央の文字が、カーソル移動で上下左右、A/Bの端で上下移動します。それで動作確認してください。
スピーカーの接続
Speaker | LGT8F328P | |
1 | (+) | 9 |
2 | (-) | GND |
スピーカーの動作確認
ArduboyTonesライブラリのサンプルスケッチ ArduboyTonesTestを使って動作確認します。
画面の表示に従って。Bボタンなどを押して、音が確かになるかどうかを確認します。
完成したので、ゲームを動かしてみる
picovadershttps://github.com/boochow/picovaders上記から入手して、Arduino IDEで読み込んでコンパイルして書きこみます。
ちゃんと動作しました
コメントを残す