PD実践2021:LCDの使い方

EV3の画面に文字や絵を表示することができるLCDのAPIを学びます。

  • LCDに関するAPI
    •  デォルトのフォントを設定する。シミュレータは標準フォントのみ対応。
      •  ER ev3_lcd_set_font (lcdfont_t font)
        • 引数
          • font フォントの番号
          • 戻り値
            • E_OK 正常終了
            • E_ID   不正ID番号
        • 小さいフォントを設定する:ev3_lcd_set_font(EV3_FONT_SMALL);
        • 標準のフォントを設定する:ev3_lcd_set_font(EV3_FONT_MEDIUM);
    • 指定位置に文字列を表示する(x=0,y=10)に”HELLO”を表示する。なお、減点は画面の左隅、x軸は右方向、y軸は下方向。
      • ER  ev3_lcd_draw_string (const char *str, int32_t x, int32_t y)
        • 引数
          • x 左上隅の水平方向の位置[ピクセル]
          • y 左上隅の垂直方向の位置[ピクセル]
          • str 文字列
        • 戻り値
          • E_OK 正常終了
        • 位置(x=0,y=10)に”HELLO”を表示する
          • ev3_lcd_draw_string(“HELLO”, 0, 10);
    •  四角を描いて色を塗る
      • ER ev3_lcd_fill_rect (int32_t x, int32_t y, int32_t w, int32_t h, lcdcolor_t color)
        • 引数
          • x 左上隅の水平方向の位置[ピクセル]
          • y 左上隅の垂直方向の位置[ピクセル]
          • w 矩形の幅
          • h 矩形の高さ
          • color カラー
        • 戻り値
          • E_OK 正常終了
        • 指定した位置(x=20,y=30)を始点として、幅40、高さ50の矩形を描き、黒色を塗る
          •  ev3_lcd_fill_rect(20, 30, 40, 50, EV3_LCD_BLACK);
      • LCD画面全体を白く塗り潰す(クリアする)
        • ev3_lcd_fill_rect(0, 0, EV3_LCD_WIDTH, EV3_LCD_HEIGHT, EV3_LCD_WHITE);
    • サンプルプログラム
        • /lcd_1/app.c:”hello, world”とLCDに表示するプログラム。
          • 最初の2行はEV3RTのC言語のAPIとmain_task関数を使うときに必要なインクルードファイル。これがないとビルドに失敗する。普通のC言語はmain関数から始まるが、EV3RTのC言語はmain関数の代わりにmain_task関数で始まる。
          • また、main関数の最後はreturn 0で終了するが、EV3RTのC言語はext_tsk()関数で終了する。リアタイムOSでは複数の処理を並列して実行させる機能があり、その処理単位をタスクとよぶ。この関数はタスクの終了処理を行う。
          • LCDに文字列を表示するにはev3_lcd_draw_string関数を使う。始めの引数は文字列、2番目の引数はLCDの横方向の位置、3番目の引数はLCDの縦方向の位置で減点は画面左上隅。このサンプルではC言語バイブル「プログラング言語C」 (カーニハン&リッチー著)の最初の例と同じ”hello, world”とLCDに表示する。
      #include "ev3api.h" 
      #include "app.h"    
      
      void main_task(intptr_t exinf) {
          ev3_lcd_draw_string("hello, world", 0, 10); /* 指定位置に文字列を表示 */
          ext_tsk();   /* タスク終了処理 */                                    
      }
        • /lcd_2/app.c:カウンタと矩形を表示するプログラム。
          • 変数をLCDに表示する方法を学ぶ。ev3_lcd_draw_stringは文字列しか表示できないので、sprintf関数を使い、変数countを2番目の引数の書式で文字列strに書いている。
      #include "ev3api.h"
      #include "app.h"
      
      void main_task(intptr_t exinf) {
          int count;
          char str[32];                        /* カウントを表示するための文字列 */
      	
          ev3_lcd_set_font(EV3_FONT_MEDIUM);   /* LCDに表示するフォントの設定 */
          while(1){
      	sprintf(str, "COUNT:%d", count); /* カウントを表示用の文字列作成 */	
              ev3_lcd_draw_string(str, 30, 60); /* 指定した位置にカウントを表示 */
      	
      	ev3_lcd_fill_rect(10, 10, 100, 20, EV3_LCD_BLACK); /* 指定した位置に矩形表示 */
      		
              tslp_tsk(100000);               /* 100000us(100ms) 刻みで実行 */
      	count++;
          }
      
          /* LCD画面全体を白く塗り潰す(クリアする)*/
          ev3_lcd_fill_rect(0, 0, EV3_LCD_WIDTH, EV3_LCD_HEIGHT, EV3_LCD_WHITE);
          tslp_tsk(1000000);	
          ext_tsk();   /* タスク終了処理 */                                    
      }
    • 演習
      • サンプルプログラム1のビルドと実行
        • 端末で以下のコマンドを実行する。
          • $ cd /ev3rt/hrp3/sdk/workspace
          • $ make app=lcd_1
        • タッチセンサをEV3(ポート1)に接続した後、appをEV3にアップロードし、動作を確認してください。
      • サンプルプログラム1と同様にサンプルプログラム2をビルドしてEV3にアップロードし,動作を確認する.
        • 端末で以下のコマンドを実行する。
          • $ cd /ev3rt/hrp3/sdk/workspace
          • $ make app=lcd_2
    • レポート1
      •  サンプルプログラムlcd_2を改造し、以下の機能を実現する。なお、サンプルプログラムは変数countが0に初期化されていないので、まず、0に初期化すること。
        • countが100になったら、LCDに“Game Over!”と表示してタスクを終了する。

 

  • 参考
    • LCD API (EV3RT C API Reference)
      •  LCD画面の幅は178[px]、高さは128[px]である。
      •  LCD画面の左上隅が、座標(x=0,y=0)である。
      •  フォントサイズは以下の2通り。なお、シミュレータは普通サイズのフォントのみ対応している。
        • EV3_FONT_SMALL 小さいサイズのフォント:幅6×高さ8[px]
        • EV3_FONT_MEDIUM 普通サイズのフォント:幅10×高さ16[px]

終わり

コメント

タイトルとURLをコピーしました