macsbug

Just another WordPress.com site

esp32 snake with M5STACK

leave a comment »

esp32-snaker ゲームを M5STACK に移植しました。     2018.01.14


Cボタンで  START と RETRY。Aボタン=左。Bボタン=右。
A + C ボタン=上。B + Cボタン=下 です。

1970年代後半に登場したビデオゲームの古典。プレイヤーはヘビ
(1キャラ分から始まり) を操作しエサを回収します。エサを回収
するたびにヘビの身体は1キャラずつ長くなっていきます。

GitHub の 「HailTheBDFL」 に 「esp32-snaker」 があります。

ESP32 用で Arduino IDE で使用できます。
基の仕様は ESP32 + ILI9314 TFT Display で M5STACK ( ILI9314 TFT ) に
移植致しました。 初心者にも解りやすいスケッチですので 勉強にもなる
かと思います。「HailTheBDFL」 に感謝致します。


準備:
esp32-snake」を ダウンロードします。


移植:合計 15箇所で 削除 8箇所、変更 4つ、追加 3箇所 です。

1. 削除:もしくはコメントアウト( // ) します。:8箇所です。
_ 01. #include <Adafruit_GFX.h>
_ 02. #include <Adafruit_ILI9341.h>
_ 03. #include <SPI.h>
_ 04. Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI,
_     TFT_CLK, TFT_RST, TFT_MISO);
_ 05. touchAttachInterrupt(27, left, threshold); //Touch input
_ 06. touchAttachInterrupt(12, right, threshold);
_ 07. touchAttachInterrupt(14, up, threshold);
_ 08. ttouchAttachInterrupt(15, select, threshold);

2. 変更:DISPLAYを Adafruit_ILI9341 から M5STACK用に 3つ変更します。
_ 09. void setup() の「tft.begin(); 」 は 「 M5.begin(); 」に変更します。
_ 10. 全ての「 tft 」を 「 M5.Lcd 」に変更します。
_   Arduino IDE の「編集」の「検索」で 「検索テキスト = tft. 」,
_   「 置換テキスト = M5.Lcd. 」, 「 全て置換 」で 一気に変更できます。
_ 11. 「 tft.setRotation(3); 」は「 M5.Lcd.setRotation(0); 」:3 から 0
_   にします。これは 画面の向きです。
_ 12. 場所:void setup(){ の一番下。
_  「 randomSeed(analogRead(6)); 」は「 randomSeed(analogRead(26)); 」
_   6 から 26にします。

3. 追加:M5STACK用に 3箇所追加します。
_ 13. 場所:宣言部の一番上に追加。

  #include <M5Stack.h>

_ 14. 場所:void loop(){ の一番上に追加。

  if(M5.BtnA.isPressed() && M5.BtnC.isPressed()){up  ();}
  if(M5.BtnB.isPressed() && M5.BtnC.isPressed()){down();}
  if(M5.BtnA.isPressed()){left  ();}
  if(M5.BtnB.isPressed()){right ();}
  if(M5.BtnC.isPressed()){select();}

_ 15. 場所:void loop(){ の一番下に追加。

  M5.update();

コントロール:
_ 原作のコントロールは ESP32 の Touch input 端子を使用しています。
_  Touch input 端子は TOUCH 0 – TOUCH 9 まで 10個あります。
_  GPIO 0,2,4,12,13,14,15,27,32,33 です。
_ コントロールの内容は up, down, left, right, select の 4つです。
_ M5STACK の 全面フロントにある 左から A , B , C ボタンに置き換えます。
_ ボタンは 3つですので
_   left = A, right = B, select = C, up = A + C, down = B + C にしました。
_ 結果:スタート と リトライ は C ボタンです。
_    左は A、右は B、上は A+C、下は B+C です。
_ ボタン操作:
_  if(M5.BtnC.isPressed()) { select() ;}
_      C ボタンを「押している間は」 次の命令(select)を実行。
_  if(M5.BtnC.wasPressed(); { select() ;}
_      C ボタンを「押した時に」   次の命令(select)を実行。
_  他に、read, isReleased, wasReleased, pressedFor, releasedFor,
_     lastChange の便利な命令があります。
_ 速度:「float gameSpeed = 6; 」で 6 のスピードです。


感想:
ゲームスピード「float gameSpeed = 6; 」では 早いので 2 にしましたが
こういう分野のゲームは 忙しく不得意ですので勝てません。

ESP32の知りたいテクニック:
_ ESP32 + SD + DISPLAY のあるボードで、SD内にあるスケッチを起動する
_ 方々は無い物でしょうか?
_ ESP32起動時は 画面にスケッチのリストが出て、あるスケッチを選択すると
_ そのスケッチが起動する仕組みが欲しいです。
_ これが出来れば Arduino IDE 開発環境で コンパイルや書込みをせず
_ プログラム入りSD を配布するだけで多数のスケッチが動く様になります。
_ これって 今あるコンピューターのファインダーみたいな機能でしょうか。


 

広告

Written by macsbug

1月 14, 2018 @ 2:23 pm

カテゴリー: ESP32

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。