[[戻る>TinyArcade]]
*30FPSで画面表示 [#kd5cdab5]
30FPSで画面表示するにはmicros()関数を使い時間を取って覚えておき~
前回の時刻から33333μs(≒33ms)以上経っていたら画面更新する。~
そしてサウンド処理はそれよりも早く処理したいのでloop()関数の最後で毎回処理する。~
FPSの値を変えるとFPSが変わるけど処理落ちが多かったので30にしてます。~
垂直帰線期間は取得できるのかは不明。どのサンプルも時間を待って更新してた・・・。~
~
追記~
[[DMA転送を使って60FPSで画面表示>TinyArcade/DMA転送を使って60FPSで画面表示]]できました。~ [#e0febf82]
[[DMA転送を使って60FPSで画面表示>TinyArcade/DMA転送を使って60FPSで画面表示]]できました。~
*サンプルプログラム [#ecace97d]
 #include <TinyScreen.h>
 
 static const unsigned long FPS =  30;
 static const unsigned long INTERVAL_TIME = 1000000 / FPS;
 
 TinyScreen tiny_screen = TinyScreen(TinyScreenPlus);
 unsigned long micros_time;
 
 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);
 	micros_time = micros();
 }
 
 void loop()
 {
 	unsigned long interval_time = micros() - micros_time;
 	if(interval_time > INTERVAL_TIME)
 	{
 		// 33ms間隔で行う処理 (画面更新、ゲーム進行など) To do : Processing done at 33 ms intervals, frame update etc
 		char text[128];
 		tiny_screen.clearScreen();
 		tiny_screen.setCursor(0, 0);
 		sprintf(text, "FPS %d", 1000000 / interval_time);
 		tiny_screen.print(text);
 		tiny_screen.setCursor(0, 12);
 		sprintf(text, "time %lums", interval_time / 1000);
 		tiny_screen.print(text);
 		micros_time = micros();
 	}
 	// 最速で行う処理 (サウンド処理など) To do : The fastest process. sound update etc.
 }

*実行結果 [#tf5d1998]
#ref(ScreenSample2.jpg,,,100%)
正確に30FPSにはなっていないが大体それっぽい数値になるはず。~
*サンプルプログラムのダウンロード [#j98ae5b5]
#ref(ScreenSample2.zip)~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS