マルツTOP > technology_news_report > WAVESHARE-19192



1.28インチ丸型LCDディスプレイモジュール
WAVESHARE-19192

デジタル時計を表示するには

              

 WAVESHAREより発売された1.28インチ丸型LCD ディスプレイモジュール 「WAVESHARE-19192」を用いて、デジタル時計のサンプルを製作しました。製作を通じて感じたWAVESHARE-19192 (以下、本製品) の使用感について簡単にレビューします。


WAVESHARE-19192について

  •  本製品の解像度は240×240ピクセルで、マイコンとの通信にはSPIを使用しています。また、Arduino/Raspberry Pi/STM32用の開発リソースが、メーカー公式wikiページに掲載されています。各マイコンとの接続方法や、サンプルソースコードの動かし方は、公式wikiページにわかりやすい解説が載っていますので、そちらを参照してください。

     Arduinoの場合は、シンプルなアナログ風の時計が表示されます。Raspberry Piの場合は、シンプルなアナログ風の時計を表示した後に、少し格好のよいアナログ風の時計が表示されます。アナログ風の時計表示では、任意の座標に長針・短針・秒針およびロゴや文字が表示されていますが、残念ながら秒針は動きません。

     ちなみに余談ですが、本製品の紹介として多くのECサイトで取り上げられているデジタル時計の表示は「BMP形式の画像データを表示している」だけで、時計としての機能を持っていません。逆に言うと、自由にデザインした240×240サイズのBMP画像を表示することが可能なので、開発の幅は広がると言えます。

     実際に時計としての機能を実装するには、各自でソースコードを作成する必要があります。必要最低限のライブラリが用意されていて、各ライブラリのソースコードにドキュメントがありますが、ある程度LCDに慣れていないと理解するのは難しいという印象を持ちました。



    Arduinoを使ったデジタル時計

  •  ここからは、Arduinoを使ったデジタル時計のサンプルソースコードを紹介します。公式wikiページよりダウンロードしたサンプルソースコードをArduino IDEで開くと、メインのLCD_1inch28.inoファイル以外に、必要なライブラリがタブで表示されます。これらのうち、”GUI_Paint.h”の184行目を見ると、以下のようなコードが書かれています。Paint_DrawTimeは、デジタルを表示する関数となっています。

    void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, UWORD Color_Background, UWORD Color_Foreground);

     このカッコ( )内をわかりやすく説明して書き直すと、以下のようになります。

    void Paint_DrawTime(表示するX座標位置, 表示するY座標位置, 時刻設定, フォント設定, バックグラウンドの色設定, 文字の色設定);

     フォント設定は、文字の大きさを意味しており、「Font8、Font12、Font16、Font20、Font24」から選べます。設定する際は&を付けます。例えば、Font8にしたい場合は、以下のようにします。

    void Paint_DrawTime(表示するX座標位置, 表示するY座標位置, 時刻設定, &Font8, バックグラウンドの色設定, 文字の色設定);

     バックグラウンドの色と文字の色の設定に関しては、”GUI_Paint.h”の82~107行目に定義があるので、そこから選ぶとよいでしょう。例えば、「バックグラウンドの色を青色、文字の色を赤色」にしたい場合は、以下のようにします。

    void Paint_DrawTime(表示するX座標位置, 表示するY座標位置, 時刻設定, フォント設定, BLUE, RED);

     時刻の設定が、この関数の中で一番難しい部分になっています。しかし、”GUI_Paint.h”の152~160行目に詳細が書かれており、C言語の構造体を知っている方は容易に理解できると思います。構造体に関する説明はここでは行いませんが、実際にどのようにソースコードを書いていくとよいのかを説明します。

  • ソースコードの書き方

     まず、メインとなるLCD_inch28.inoファイルのsetup関数より前に、以下の4行を追加します。

     int h = 0;
     int m = 0;
     int s = 0;
     PAINT_TIME ptime = {h, m, s};
     
     Paint_DrawTimeでは、Hour, Minute, Secondの3つが使用可能になっています。Arduinoのloop関数で時刻更新をするために、Hour, Minute, Secondに対して、それぞれh, m, sの変数を宣言します。その後、ptimeと言う名前で、時刻全体に関する変数を宣言します。

     次に、LCD_inch28.inoファイルのsetup関数内に書かれているPaint_DrawLineや、Paint_DrawImageの行を全てコメントアウトするか削除します。プログラム全体のうち、void setup( )までの中身は以下のようになります。

    #include <SPI.h>
    #include "LCD_Driver.h"
    #include "GUI_Paint.h"
    #include "image.h"

    int h = 0;
    int m = 0;
    int s = 0;

    PAINT_TIME ptime = {h, m, s};

    void setup()
    {
      Config_Init();
      LCD_Init();
      LCD_SetBacklight(1000);
      Paint_NewImage(LCD_WIDTH, LCD_HEIGHT, 0, BLACK);
      Paint_Clear(BLACK);
      Paint_DrawCircle(120,120, 120, BLUE ,DOT_PIXEL_2X2,DRAW_FILL_EMPTY);
    }

     void loop( )の中身に関しては、以下のように書くことで、00:00:00から1秒ずつ更新されるループのプログラムが動作します。スラッシュ2つの後に、簡単にコメントを書きましたので、参考にしてください。ただし、作ってみた感想としては、Arduinoの処理が遅いように感じたので、delay(1000); の部分は、もう少し短く設定してもよいかもしれません。また、時刻の保持機能は持っていないので、電源を入れ直すと時刻がリセットされます。
     
    void loop()
    {
      Paint_DrawTime(120, 120, &ptime, &Font24, BLACK, WHITE); //デジタル表示する関数
      delay(1000);              //1秒待つ
      ptime.Sec++;            //ptimeの秒を1増やす
      if(ptime.Sec == 60){  //ptimeの秒の値が60になった時の処理
        ptime.Sec = 0;         //ptimeの秒の値を0にする
        ptime.Min++;          //ptimeの分の値を1増やす
      }
      if(ptime.Min == 60){  //ptimeの分の値が60になった時の処理
        ptime.Min = 0;         //ptimeの分の値を0にする
        ptime.Hour++;         //ptimeの時の値を1増やす
      }
      if(ptime.Hour == 24){ //ptimeの時の値が24になった時の処理
        ptime.Sec = 0;         //ptimeの秒の値を0にする
        ptime.Min = 0;         //ptimeの分の値を0にする
        ptime.Hour = 0;       //ptimeの時の値を0にする
      }
    }



 本製品を用いたデジタル時計の表示方法を簡単に解説しましたが、いかがでしたか。本製品は、デジタル時刻を表示する以外にも、LCDとして色々表示することが可能です。本製品に興味を持った方は、是非、マルツエレックでお買い求めください!

(文責:谷 遼)


このページのコンテンツはDigi-Key社より提供されています。


Digi-Key社の全製品は 1個からマルツオンラインで購入できます



※製品カテゴリー総一覧はこちら



ODM、OEM、EMSで定期購入や量産をご検討のお客様へ【価格交渉OK】

毎月一定額をご購入予定のお客様や量産部品としてご検討されているお客様には、マルツ特別価格にてDigi-Key社製品を供給いたします。
条件に応じて、マルツオンライン表示価格よりもお安い価格をご提示できる場合がございます。
是非一度、マルツエレックにお見積もりをご用命ください。


ページトップへ