[[戻る>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(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)~

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS