30FPSで画面表示するにはmicros()関数を使い時間を取って覚えておき
前回の時刻から33333μs(≒33ms)以上経っていたら画面更新する。
そしてサウンド処理はそれよりも早く処理したいのでloop()関数の最後で毎回処理する。
FPSの値を変えるとFPSが変わるけど処理落ちが多かったので30にしてます。
垂直帰線期間は取得できるのかは不明。どのサンプルも時間を待って更新してた・・・。
#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.
}
正確に30FPSにはなっていないが大体それっぽい数値になるはず。