1.ボタンの入力を知る
nxtOSEKでは、右のRUNボタンと中央のENTERボタンにプログラムによって、自由に役割を与えることが出来ます。
左のボタンはプログラム終了、下のボタンは電源OFFボタンであり、役割は変えられません。
ここでは、NXTボタンの入力を知り、それに応じてロボットのモータを動かすプログラムを作成します。
それでは次のプログラムを作成してください。ここではファイル名は button1.c とします。
このプログラムはNXTの右のボタンを押すと右のモータが回転、中央のボタンで左のモーターが回転するプログラムです。
それでは新しく使用したAPIや変数の解説をします。
今回扱った本体のボタンや、タッチセンサ、ロータリエンコーダなどを使うと、様々な操作をNXTに対してすることが出来るでしょう。
左のボタンはプログラム終了、下のボタンは電源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()
ecrobot_is_RUN_button_pressed()
NXTのENTERボタンが押されているかを返すAPIです。押されているときが'1'になります。
ecrobot_is_RUN_button_pressed()
NXTのRUNボタンが押されているかを返すAPIです。押されているときが'1'になります。
今回扱った本体のボタンや、タッチセンサ、ロータリエンコーダなどを使うと、様々な操作をNXTに対してすることが出来るでしょう。
2.課題
1.サンプルプログラムの動作を確認せよ。
2.ライントレースするプログラムで、プログラムを RUN させた後に、コースの黒と白の値を読み、黒(または白)と判断する閾値を決めて、ライントレースを行うプログラムを作成せよ。なお、黒、白および、それから計算した閾値を、LCD に表示させるようにせよ。
【ヒント】
2.ライントレースするプログラムで、プログラムを RUN させた後に、コースの黒と白の値を読み、黒(または白)と判断する閾値を決めて、ライントレースを行うプログラムを作成せよ。なお、黒、白および、それから計算した閾値を、LCD に表示させるようにせよ。
【ヒント】
1.黒の値を読む→2.白の値を読む→3.スタートするの動作を、中ボタン(あるいは右ボタン)が押される毎に、順に実行するようにすればよい。