【Arduino】TinyJoyPadでゲームを楽しむ

  • 投稿 : 2020-04-22

TinyJoyPad

TINY JOYPAD
https://www.tinyjoypad.com/tiny-joypad

回路図もプログラムも公開されています。ATtiny85で製作されているゲーム機で、ゲームも数種類公開されてます。

テトリスとかもあります

ArduBoy互換機

ArduBoy・Arduboy https://arduboy.com/Arduboyは、オープンソースのゲーム開発・共有プラットフォームです。本体はクレジットカード大のサイズのゲーム

某氏の猫空

前回作成したArduBoy互換機(I2Cディスプレイ版)が、そもままTinyJoyPadとして利用できます。

LGT8F328P- SSOP20(Pro Mini Style )

実際に動かしてみたところです。

LGT8F328P-LQFP32(Nano Style)

Arduino nano互換機でも同様に動作しました

主な部品

・0.96インチ OLED(SSD1306 128×64 I2C)
・LGT8F328P (Arduino 互換機)
・自作ゲームパッド (タクトスイッチ)
・圧電スピーカー

ATtiny85を個人で買うには意外と高いので、80円Arduino 互換機とかで代用できるのでは?と前から考えてて、実際やってみたらできました。

接続ピンの比較

OLED   LGT8F328P   ATtiny85
VCC  | VCC       | VCC
GND  | GND       | GND
SCL  | A5(PC5)   | PB2
SDA  | A4(PC4)   | PB0

Gamepad       LGT8F328P    ATtiny85
UP_BUTTON    | 2          | A3
DOWN_BUTTON  | 4          | A3
LEFT_BUTTON  | 6          | A0
RIGHT_BUTTON | 7          | A0
B_BUTTON     | A1         | -
A_BUTTON     | A0         | 1
GND          | GND        | GND

Speaker  LGT8F328P    ATtiny85
(+)    | 9          | 4
(-)    | GND        | GND

Arduino ピン番号とポート名

ARDUINO   PORT  | ARDUINO   PORT  
  PIN     NAME  |   PIN     NAME  
-------   ----  | -------   ----  
   0      PD0   |   10      PB2 
   1      PD1   |   11      PB3
   2      PD2   |   12      PB4
   3      PD3   |   13      PB5
   4      PD4   |   A0      PC0
   5      PD5   |   A1      PC1
   6      PD6   |   A2      PC2
   7      PD7   |   A3      PC3
   8      PB0   |   A4      PC4
   9      PB1   |   A5      PC5 

ライブラリとゲーム本体の修正が必要

TinyJoyPadTINY JOYPAD https://www.tinyjoypad.com/tiny-joypad回路図もプログラムも公開されているATtiny85で製作されてい

お部屋でモバイル

プログラムの修正は、ごちゃごちゃするので、いつもどおり別記事に・・。

補足:レジスタ

#define DIGITAL_WRITE_HIGH(PORT) PORTB |= (1 << PORT)
//
DDRB |= (1 << SSD1306_SDA);	// Set port as output

DDRB: ポートB方向レジスタ
PORTB: ポートBデータレジスタ
PINB: ポートB入力レジスタ(読み取り専用)


・移植しにくいコードになります。digitalReadとdigitalWriteを使ってコードを書けば、他のAtmelのマイコンすべてで動くようにすることも容易です。

・ポートを直接アクセスすると、不意のトラブルが発生しやすくなります。DDRD = B11111110というコードはどうでしょう。ピン0はシリアル通信の受信ライン(RX)であり、入力でなくてはなりません。うっかり、このピンを出力に設定してしまうと、シリアル通信が突然使えなくなり、あなたはとても混乱することでしょう。
Arduino 日本語リファレンス

初めて知ったのは、このテクニック。まあ、今では推奨されないと思うけど・・。アッセンブラ?みたいなことができるんですね。

補足:INPUT_PULLUP

pinMode(2,INPUT_PULLUP);

あと、このINPUT_PULLUP。これ指定するとプルアップ抵抗が必要なくなるのはしってたけど、実際「INPUT」と比べてみた体感で分かった感じ。

実際に、INPUT_PULLUPとINPUTで、digitalRead()をしてみればよくわかると思う。INPUTだとdigitalRead()の取得できるものが不安定になる。

参考:
意外と知られていない?INPUT_PULLUP – スイッチサイエンス マガジン
プルアップとプルダウン抵抗の値ってどうやって求めるの? - 半導体事業 - マクニカ

tinyjoypadでゲームを楽しむ

2:10 あたりから、ゲームの雰囲気がわかります。

スポンサーリンク