ArduBoyを自作する

# 目的
Arduino環境を使用してArduboyというゲーム機が販売されています。
購入して遊ぶのも面白いですが、パーツを購入して自作するのも面白そう考えて自作に至りました。

# 準備
[Adafruit-Itsy-Bitsy-32u4-16MHz](https://www.amazon.co.jp/Adafruit-Itsy-Bitsy-32u4-16MHz/dp/B07BT2GLNW/ref=sr_1_2?s=diy&ie=UTF8&qid=1549085465&sr=8-2&keywords=itsy+bitsy+32u4)
[I2C シリアル 128×64 OLED LCDディスプレイ](https://www.amazon.co.jp/dp/B071ZPGWHL/ref=cm_sw_r_tw_dp_U_x_J.rvCb6JSVNXP)
[圧電スピーカ](https://www.amazon.co.jp/gp/product/B017Z87BYW/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)
ボタン６つ（十字キー４つ、ABボタン２つ）
手のひらに収まるサイズのユニバーサル基板
はんだ付け用の工作道具
絶縁テープやボンドガン等の工作道具

# 回路図
Adafruit-Itsy-Bitsy<--->Display
![IMG_0292.JPG](https://qiita-image-store.s3.amazonaws.com/0/344880/492941c3-4925-8f35-0898-fb6d6d59bd1c.jpeg)

Adafruit-Itsy-Bitsy<--->スピーカ
![IMG_0293.JPG](https://qiita-image-store.s3.amazonaws.com/0/344880/859f443e-2e1f-f0f1-2b5f-150073458e43.jpeg)

Adafruit-Itsy-Bitsy<--->ボタン
![IMG_0295.JPG](https://qiita-image-store.s3.amazonaws.com/0/344880/f13f5353-7a4a-611b-d941-3d0cb378c6af.jpeg)

Adafruit-Itsy-Bitsy<--->LED
![IMG_0294.JPG](https://qiita-image-store.s3.amazonaws.com/0/344880/04904cb5-f7d4-7836-288f-aa70c8ce524e.jpeg)

上記を半田付けします。下記のようになりました。
![IMG_0297.JPG](https://qiita-image-store.s3.amazonaws.com/0/344880/59bd8078-52d3-bf6e-1e30-1e564b7be0ef.jpeg)
![IMG_0298.JPG](https://qiita-image-store.s3.amazonaws.com/0/344880/3bc574bf-9592-a599-3858-ef353028e3ae.jpeg)

# コード
いくつかのゲームはソースコードが公開されています。
[Mystic Baloon](http://www.team-arg.org/mybl-manual.html)のサイトからソースコードをダウンロードして使用します。
MYBL_AB/MYBL_AB.ino を使用します。

```
/*
  Mystic Balloon: http://www.team-arg.org/mybl-manual.html

  Arduboy version 1.7.2:  http://www.team-arg.org/mybl-downloads.html

  MADE by TEAM a.r.g. : http://www.team-arg.org/more-about.html

  2016-2018 - GAVENO - CastPixel - JO3RI - Martian220

  Game License: MIT : https://opensource.org/licenses/MIT

*/

//determine the game
#define GAME_ID 34

#include "globals.h"
#include "menu.h"
#include "game.h"
#include "inputs.h"
#include "player.h"
#include "enemies.h"
#include "elements.h"
#include "levels.h"


typedef void (*FunctionPointer) ();

const FunctionPointer PROGMEM  mainGameLoop[] = {
  stateMenuIntro,
  stateMenuMain,
  stateMenuHelp,
  stateMenuPlaySelect,
  stateMenuInfo,
  stateMenuSoundfx,
  stateGameNextLevel,
  stateGamePlaying,
  stateGamePause,
  stateGameOver,
  stateMenuPlayContinue,
  stateMenuPlayNew,
};

void setup()
{
  arduboy.boot();                                           // begin with the boot logo en setting up the device to work
  arduboy.audio.begin();
  arduboy.bootLogoSpritesSelfMasked();
  arduboy.setFrameRate(60);                                 // set the frame rate of the game at 60 fps
  loadSetEEPROM();
}

void loop() {
  if (!(arduboy.nextFrame())) return;
  if (gameState < STATE_GAME_NEXT_LEVEL && arduboy.everyXFrames(10))sparkleFrames = (++sparkleFrames) % 5;
  arduboy.pollButtons();
  arduboy.clear();
  ((FunctionPointer) pgm_read_word (&mainGameLoop[gameState]))();
  arduboy.display();
}
```

# テスト
ArduboyでMysticBaloonを遊ぶことができればOKです。
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">play DIY arduboy. <a href="https://t.co/jZfDElSCyL">pic.twitter.com/jZfDElSCyL</a></p>&mdash; st (@st17890027) <a href="https://twitter.com/st17890027/status/1095779320721633281?ref_src=twsrc%5Etfw">February 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

# FAQ

```
Board: "Arduino/Genuino Uno"
error: 'TCCR3A' was not declared in this scope
error: 'TCCR3B' was not declared in this scope
```
ボード選択が正しくないです。ツール→ボードから「Arduboy」を選択して下さい。
「Arduboy」が見つからなければツール→ボード→ボードマネージャから「Arduboy  by Arduboy Team」を追加して下さい。

# 参考
・[組み込みエンジニアでなくても週末にArduinoを使って遊ぶ](https://qiita.com/seigot/items/958d3f2817a4bdac8754)
・[Adafruit Itsy Bitsy 32u4 - 5V 16MHzでLチカ](https://qiita.com/seigot/items/ddaaf7fcedc0e78d4198)
・[Arduino互換機を作ってみた](https://silentworlds.info/2018/08/02/post-474/)
・[Arduboy Library 2.0](https://github.com/MLXXXp/Arduboy2)
・[Production Arduboy Schematic](https://community.arduboy.com/t/production-arduboy-schematic/702)
・[Arduboy Manager](http://www.crait.net/arduboy/)
・[「Arduboy」超薄型カードサイズで懐かしいデザインの組み込みゲーム機 開封レビューとおすすめゲーム](http://gadgetr.seesaa.net/article/arduboy.html)
・[Mystic Baloon](http://www.team-arg.org/mybl-manual.html)