- 追加された行はこの色です。
- 削除された行はこの色です。
[[戻る>TinyArcade]]
*コントローラー入力 [#v9811bfa]
コントローラーはバージョンが2種類あるようで~
version 1はアナログ2軸の方向キーとデジタルボタンx2~
version 2はデジタル4ボタンの方向キーとデジタルボタンx2~
で構成されている。プログラム側で判別してそれぞれのプログラムを書く必要がある。~
webで公開されているサンプルプログラムはversion 1に対応のものが多いが私の手持ちはversion 2でした。~
TinyArcadeの仕様で12bitADCって書いてあったけどそれがレバーの事なのだとしたらversion2には12bitADC未搭載または未接続なのかもしれない。~
下記urlのTinyArcadeの起動メニューのソースファイルに書いてある方法を採用しました。~
https://tinycircuits.com/blogs/learn/171319495-tiny-arcade-menu-update ~
*サンプルプログラム [#j37effae]
#include <stdlib.h>
#include <TinyScreen.h>
// Pin
static const int DIR_X_PIN = 42;
static const int DIR_Y_PIN = 1;
static const int DIR_UP_PIN = 42;
static const int DIR_DOWN_PIN = 19;
static const int DIR_LEFT_PIN = 25;
static const int DIR_RIGHT_PIN = 15;
static const int BUTTON_LEFT_PIN = 45;
static const int BUTTON_RIGHT_PIN = 44;
static const int DIR_THRESHOLD = 250;
TinyScreen tiny_screen = TinyScreen(TinyScreenPlus);
int version = 1;
void setup()
{
tiny_screen.begin();
tiny_screen.setBitDepth(TSBitDepth8);
tiny_screen.setBrightness(8);
tiny_screen.setFont(liberationSansNarrow_12ptFontInfo);
tiny_screen.fontColor(TS_8b_White, TS_8b_Black);
// コントローラー初期化
pinMode(4, INPUT_PULLUP);
if(!digitalRead(4))
{
version = 2;
pinMode(DIR_UP_PIN, INPUT_PULLUP);
pinMode(DIR_DOWN_PIN, INPUT_PULLUP);
pinMode(DIR_LEFT_PIN, INPUT_PULLUP);
pinMode(DIR_RIGHT_PIN, INPUT_PULLUP);
pinMode(DIR_UP_PIN, INPUT_PULLUP);
pinMode(DIR_DOWN_PIN, INPUT_PULLUP);
pinMode(DIR_LEFT_PIN, INPUT_PULLUP);
pinMode(DIR_RIGHT_PIN, INPUT_PULLUP);
}
pinMode(BUTTON_LEFT_PIN, INPUT_PULLUP);
pinMode(BUTTON_RIGHT_PIN, INPUT_PULLUP);
}
void loop()
{
char text[128];
strcpy(text, "PUSH ");
if(version == 1)
{
int dir_x = analogRead(DIR_X_PIN) - 512;
if(dir_x < -DIR_THRESHOLD)
{
strcat(text, "R ");
}
else if(dir_x > DIR_THRESHOLD)
{
strcat(text, "L ");
}
int dir_y = analogRead(DIR_Y_PIN) - 512;
if(dir_y < -DIR_THRESHOLD)
{
strcat(text, "U ");
}
else if(dir_y > DIR_THRESHOLD)
{
strcat(text, "D ");
}
}
else
{
if(!digitalRead(DIR_UP_PIN))
{
strcat(text, "U ");
}
if(!digitalRead(DIR_DOWN_PIN))
{
strcat(text, "D ");
}
if(!digitalRead(DIR_LEFT_PIN))
{
strcat(text, "L ");
}
if(!digitalRead(DIR_RIGHT_PIN))
{
strcat(text, "R ");
}
}
if(!digitalRead(BUTTON_LEFT_PIN))
{
strcat(text, "1 ");
}
if(!digitalRead(BUTTON_RIGHT_PIN))
{
strcat(text, "2 ");
}
tiny_screen.clearScreen();
tiny_screen.setCursor(0,0);
tiny_screen.print(text);
}
*実行結果 [#v6eae91a]
#ref(ControllerSample.jpg,,,100%)
押したボタンの文字が画面に表示される。この写真では下、1、2を同時押ししている。~
*サンプルプログラムのダウンロード [#j98ae5b5]
#ref(ControllerSample.zip)~