6.ローテーションセンサーの使用
TOP
8.ボタンの制御

7.LCDの使用

brickOSはファーウェアにはない機能を実現できます。その一例がこのLCDが自由に使用できることです。LCDはRCX本体についている、ブロックでできた人形が映っているものです。文字にして5文字しか表示できませんが、プログラムやセンサーの状態を知るのには最適です。ここではLCDの使用方法について触れていきます。

1.まずは文字を出力する

 まず、C言語をやった人ならまず最初にやったであろう、『hello world』を出力するプログラムを作ってみましょう。
次のプログラムを作成してください。ここでは作成ファイル名をlcd1.cとします。
作成したプログラムlcd1.c
#include <conio.h> // lcd func is included
#include <unistd.h>

int main(int argc, char **argv) {
	sleep(1);
	cputs("hello"); // outputs to lcd
	sleep(1);
	cputs("world"); // outputs to lcd
	sleep(1);
	cls(); // clear lcd
	
	return 0;
}
『conio.h』にLCDのAPIが記述されています。今回使用したAPIは2つです。1つ目は『cputs(char *s)』で、引数はchar型のポインタでLCDにASCII文字を出力します。しかし表示されるのは最初の5文字だけです。 また、null文字(0x00)も表示されません。2つ目は『cls()』で、引数、戻り値共になく、LCDをクリアする関数です。他にも、文字の出力位置を指定することができるAPIが用意されています。

2.変数を表示する

 光センサーの使用の項で使ったセンサーの値を表示するプログラムを見てみましょう。これには変数を表示するAPIが使われています。
#include <dsensor.h>
#include <conio.h>
#include <unistd.h>

#define LIGHTSENS       SENSOR_2

int main(int argc, char *argv[]) {

	ds_active(&LIGHTSENS);
	while(1){
	cputw(LIGHT(LIGHTSENS));
	sleep(1);
	}
	return 0;
}
今回使用したAPIは『cputw(unsigned word)』であり、引数として与えた値を16進数で4桁表示します。このようなセンサーの値を表示するのに使えます。他にも、数字の出力位置を指定することができるAPIや指定の場所を点灯させるAPIなども用意されています。それらについては後で解説します。

3.LCDの操作

brickOSではRCXの電源を入れるとLCDに人形が表示されます。このようにLCDパネルには数字の他ににさまざまなものが用意されています。たとえば、人形、バッテリー、点、半円などです。また、brickOSは表示するだけでなく、LCDの電源のON,OFFもプログラムで操作することができます。
次のプログラムを作成してください。ここでは作成ファイル名をlcd2.cとします。
作成したプログラムlcd2.c
#include <conio.h> // lcd func is included
#include <unistd.h>

int main(int argc, char **argv) {
	lcd_power_on(); // lcd power on
	lcd_int(-12); // show number -12
	sleep(1);
	lcd_digit(9); // show number 9
	sleep(1);
	lcd_show(battery_x); // show battrey
	sleep(1);
	lcd_hide(man_run); // hide man
	sleep(1);
	lcd_power_off(); // lcd power off

	return 0;
}
『sys/lcd.h』にもLCDのAPIが記述されていて、『conio.h』内でインクルードされています。今回使った関数は『sys/lcd.h』内に記述されています。『lcd_power_on()』や『lcd_power_off()』(これらは引数,戻り値なし)は名前の通り、LCDの電源の操作です。また、数字を表示する関数として『lcd_int()』、『lcd_digit()』を使っています。『lcd_int(int i)』は引数として与えた値を10進数で人形の右4桁表示し、『lcd_digit(int i)』は10進数で人形の左1桁表示します。しかし、両方ともその桁数を超えると、正常に表示されません。『lcd_show()』、『lcd_hide()』はともに引数として与えた所のセグメントを表示(非表示)にします。このセグメント指定用の変数はあらかじめ定義されています。それらについては『lcd.h』を参照してください。

3.まとめ

 この章ではLCDの使い方について学習しました。これを使用してプログラムの各所に説明文を入れることで、プログラムの動作を把握することができます。また、モーターなどの可動部分だけでなく、LCDを使うことにより、プログラムの表現の幅が広がるでしょう。
6.ローテーションセンサーの使用
TOP
8.ボタンの制御