0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Bラボデジタルサイネージ10】ページ切り替えの時間が分かる「ProgressBarModule」

Last updated at Posted at 2021-10-29

本記事は、株式会社 函館ラボラトリが運営する「Bラボ」における、大人向け「看板アプリ(デジタルサイネージ)を作るコース」用教材テキストです。

  1. 【Bラボデジタルサイネージ1】Processing+ラズパイでデジタルサイネージを作る!
  2. 【Bラボデジタルサイネージ2】ラズパイ初期設定
  3. 【Bラボデジタルサイネージ3】準備プログラム作成&機能実現の方針決定
  4. 【Bラボデジタルサイネージ4】レイアウトの基準になるグリッドを表示する「GridModule」
  5. 【Bラボデジタルサイネージ5】レイアウトの基準になる枠を表示する「PlaceholderModule」
  6. 【Bラボデジタルサイネージ6】画像を全画面表示する「FullImageModule」
  7. 【Bラボデジタルサイネージ7】ページの自動切り替え
  8. 【Bラボデジタルサイネージ8】設置されている場所の名前を表示する「LocationModule」
  9. 【Bラボデジタルサイネージ9】現在の時間を表示する「DateModule」
  10. 【Bラボデジタルサイネージ10】ページ切り替えの時間が分かる「ProgressBarModule」
  11. 【Bラボデジタルサイネージ11】現在の表示中のページが分かる「PageControlModule」
  12. 【Bラボデジタルサイネージ12】現在の天気を表示する「WeatherRModule」
  13. 【Bラボデジタルサイネージ13】直近2件のバス時刻表を表示する「BusRModule」
  14. 【Bラボデジタルサイネージ14】ごみ出しカレンダーを表示する「GomiRModule」
  15. 【Bラボデジタルサイネージ15】(発展編)ツイートを表示する「TwitterRModule」
  16. 【Bラボデジタルサイネージ16】開店/閉店を表示する「OpenCloseRModule」
  17. 【Bラボデジタルサイネージ17】部屋の温度を表示する「TemperatureRModule」
  18. 【Bラボデジタルサイネージ18】部屋の明るさを表示する「BrightnessRModule」
  19. 【Bラボデジタルサイネージ19】起動画面を表示する「LaunchingScreenModule」
  20. 【Bラボデジタルサイネージ20】RModuleの影を実装

作るもの

画面下の緑のバーで、ページが切り替わる大体のタイミングがわかるようになります。

0038.png

0042.png

実装準備

まずは、ProgressBarModuleの高さを20pxとして、高さを表す変数を定義します。

DigitalSignage.pde
/* 略 */

final int MODULE_RECT_ROUND = 30;
final int PROGRESSBAR_HEIGHT = 20; /* 追加 */

/* 略 */

新しいファイルM_ProgressBar.pdeを作ります。
ファイルの中で、ProgressBarModuleの描画用関数drawProgressBarModule()を作ります。

M_ProgressBar.pde
/* ここから追加 */
void drawProgressBarModule() {
}
/* ここまで追加 */

塗りつぶす割合を算出

ProgressBarModuleは、1秒ごとに一定の割合で、緑に塗りつぶされる面積が増えていきます。
画面が切り替わるまでの時間感覚が10秒の場合(STAY_SECOND = 10)、9秒経過した時点で100%塗り潰され(下図)、

0041.png

10秒経過した時点で次のページに切り替わり、ProgressBarModuleは真っ白にリセットされます(下図)。

0042.png

この割合を算出してみましょう。
0秒時点で0%、9秒時点で100%塗り潰されるとすると、プログラムはこのようになります。

M_ProgressBar.pde
void drawProgressBarModule() {
  float progressRate = (second % STAY_SECOND) / float(STAY_SECOND-1); /* 追加 */
}

progressRateの値は、0.0(0%)〜1.0(100%)の範囲をとります。
このprogressRateを使って、progressBarを描画してみます。

M_ProgressBar.pde
void drawProgressBarModule() {
  float progressRate = (second % STAY_SECOND) / float(STAY_SECOND-1);
  /* ここから追加 */
  noStroke();
  fill(WHITE_COLOR);
  rect(0, height-PROGRESSBAR_HEIGHT, width, PROGRESSBAR_HEIGHT);
  fill(GREEN_COLOR);
  rect(0, height-PROGRESSBAR_HEIGHT, width * progressRate, PROGRESSBAR_HEIGHT);
  /* ここまで追加 */
}

横幅いっぱいに白色バーを表示し、その上にprogressRateに応じた横幅の緑色バーを上乗せしています。
関数が完成したので、drawModules()内で呼び出してみましょう。

DigitalSignage.pde
void drawModules() {
  if (nowPageID == 0) {
    drawFullImageModule(background);
    drawGridModule();
    drawPlaceholderModule();
  } else if (nowPageID == 1) {
    drawFullImageModule(adImage[0]);
  }
  drawDateModule();
  drawLocationModule();
  drawProgressBarModule(); /* 追加 */
}

追加したあとに実行してみると、1秒ごとに緑色の面積が増えていくようになっています。

0038.png

0042.png

最後に

これで、ページ切り替えの時間が分かる「ProgressBarModule」が実装できました。
次は、**現在の表示中のページが分かる「PageControlModule」**を実装してみましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?