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);
- ER ev3_lcd_set_font (lcdfont_t font)
- 指定位置に文字列を表示する(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);
- 位置(x=0,y=10)に”HELLO”を表示する
- ER ev3_lcd_draw_string (const char *str, int32_t x, int32_t y)
- 四角を描いて色を塗る
- 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);
- 指定した位置(x=20,y=30)を始点として、幅40、高さ50の矩形を描き、黒色を塗る
- LCD画面全体を白く塗り潰す(クリアする)
- ev3_lcd_fill_rect(0, 0, EV3_LCD_WIDTH, EV3_LCD_HEIGHT, EV3_LCD_WHITE);
- ER ev3_lcd_fill_rect (int32_t x, int32_t y, int32_t w, int32_t h, lcdcolor_t color)
- デォルトのフォントを設定する。シミュレータは標準フォントのみ対応。
-
- サンプルプログラム
-
- /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に表示する。
- /lcd_1/app.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に書いている。
- /lcd_2/app.c:カウンタと矩形を表示するプログラム。
#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のビルドと実行
- レポート1
- サンプルプログラムlcd_2を改造し、以下の機能を実現する。なお、サンプルプログラムは変数countが0に初期化されていないので、まず、0に初期化すること。
- countが100になったら、LCDに“Game Over!”と表示してタスクを終了する。
- サンプルプログラムlcd_2を改造し、以下の機能を実現する。なお、サンプルプログラムは変数countが0に初期化されていないので、まず、0に初期化すること。
- サンプルプログラム
- 参考
- 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]
- LCD API (EV3RT C API Reference)
終わり
コメント