5.LCDの使用 TOPへ 7.音を鳴らす

6.ボタンの使用


ここでは、プログラム上でNXTボタンを用いる方法を学習します。 ボタンだけでは特に用いることは少ないかもしれませんが、LCDの使用や 後述のBluetooth通信と組み合わせることで色々なことができるようになるでしょう。


1.ボタンの入力を知る

nxtOSEKでは、右のRUNボタンと中央のENTERボタンにプログラムによって、自由に役割を与えることが出来ます。
左のボタンはプログラム終了、下のボタンは電源OFFボタンであり、役割は変えられません。
ここでは、NXTボタンの入力を知り、それに応じてロボットのモータを動かすプログラムを作成します。
それでは次のプログラムを作成してください。ここではファイル名は button1.c とします。
button1.c
#include "kernel.h"
#include "kernel_id.h"
#include "ecrobot_interface.h"

DeclareTask(Task1);				/* Task1を宣言 */

void ecrobot_device_initialize(){		/* OSEK起動時の処理(モータ停止) */
	nxt_motor_set_speed(NXT_PORT_B,0,1);
	nxt_motor_set_speed(NXT_PORT_C,0,1);
}

void ecrobot_device_terminate(){		/* OSEK終了時の処理(モータ停止)*/
	nxt_motor_set_speed(NXT_PORT_B,0,1);
	nxt_motor_set_speed(NXT_PORT_C,0,1);
}

void user_1ms_isr_type2(void){}

TASK(Task1)
{
	while(1){
		if(ecrobot_is_ENTER_button_pressed()){		/* ENTERボタンが押されたら真 */
			nxt_motor_set_speed(NXT_PORT_B,60,1);
			nxt_motor_set_speed(NXT_PORT_C,0,1);
		}else if(ecrobot_is_RUN_button_pressed()){	/* RUNボタンが押されたら真 */	
			nxt_motor_set_speed(NXT_PORT_B,0,1);
			nxt_motor_set_speed(NXT_PORT_C,60,1);
		}else{
			nxt_motor_set_speed(NXT_PORT_B,0,1);
			nxt_motor_set_speed(NXT_PORT_C,0,1);
		}
	}

/*---------------これより下に進むことはない-------------------------*/

	TerminateTask();					/* 処理終了 */
}


このプログラムはNXTの右のボタンを押すと右のモータが回転、中央のボタンで左のモーターが回転するプログラムです。
それでは新しく使用したAPIや変数の解説をします。

ecrobot_is_ENTER_button_pressed()
NXTのENTERボタンが押されているかを返すAPIです。押されているときが'1'になります。

ecrobot_is_RUN_button_pressed()
NXTのRUNボタンが押されているかを返すAPIです。押されているときが'1'になります。


今回扱った本体のボタンや、タッチセンサ、ロータリエンコーダなどを使うと、様々な操作をNXTに対してすることが出来るでしょう。


2.課題

1.サンプルプログラムの動作を確認せよ。
2.ライントレースするプログラムで、プログラムを RUN させた後に、コースの黒と白の値を読み、黒(または白)と判断する閾値を決めて、ライントレースを行うプログラムを作成せよ。なお、黒、白および、それから計算した閾値を、LCD に表示させるようにせよ。
【ヒント】
1.黒の値を読む→2.白の値を読む→3.スタートするの動作を、中ボタン(あるいは右ボタン)が押される毎に、順に実行するようにすればよい。



5.LCDの使用 TOPへ 7.音を鳴らす