/これが大嶋のロボットのプリグラムソースです。/

このプログラムは Jiro J. Etoさんのプログラムeto-rover.cを少しだけ変更しています。
// Kosei Demura 2001-5-14
// プログラムを実行する前に光センサが2番ポートへ、モータがA,Cポートに接続されている
// ことを確認してください。
#include "conio.h"
#include "unistd.h"
#include "direct-button.h"
#include "direct-sensor.h"
#include "direct-motor.h"
#include "sys/tm.h"

#define NORM_SPEED 255

pid_t mytask1, mytask2;

// ウエイクアップ評価関数 on-offボタンが押されていることを調べる関数
// ボタンが押されるとき働く
wakeup_t button_press_wakeup(wakeup_t data)
{
return PRESSED(button_state(),data);
}

// ボタンが離されたとき働く
wakeup_t button_release_wakeup(wakeup_t data)
{
return RELEASED(button_state(),data);

}

// 黒線をトレースする関数
static int go_trail(int argc, char **argv)
{
int th = 20; // 照明の明るさによりこの値を変更してください。 ここのthを20に設定することでセンサーの反応を良くした
ds_active(&SENSOR_2); // アクティブモードで光センサ使用(ポート2番)
motor_a_speed(NORM_SPEED); // モータ速度指定(Aポート)
motor_c_speed(NORM_SPEED);
motor_c_dir(fwd); // モータ回転方向指定(逆回転 Cポート)
motor_a_dir(fwd);

while (1) {
lcd_int(LIGHT_2); // センサの値を液晶パネルに10進数で表示
lcd_refresh(); // 液晶パネル表示更新
if ( LIGHT_2 <= th ){ // 暗いとき
motor_c_dir(fwd);
motor_c_speed(250);            暗い時はトラックの直線の時なのでc,aポート共にspeed250にしたけどスピードがめちゃくちゃ遅
motor_a_speed(250);            かった。どうしてかな?
}else{ // 明るいとき
motor_c_dir(rev);        ここに注目、ここでcポートにrevを加えることで右タイヤをリバースさせ、トレースしやすくした
motor_a_speed(40);
motor_c_speed(250);
}
}
}


// RUNボタンを押すとタスクをとめる関数
static int rover_stopper(int argc, char **argv)
{
wait_event(&button_release_wakeup,BUTTON_RUN);
msleep(200);
wait_event(&button_press_wakeup,BUTTON_RUN);

kill(mytask1); // トレースタスクgo_trailを殺す
wait_event(&button_release_wakeup, BUTTON_RUN);

return 0;
}


int main(void)
{
// legOS解析P10のサンプルプログラムとは以下の2行は順番が違う
// 何故かこの順番でないとプログラムがうまく動かない
mytask2 = execi(&rover_stopper,0, NULL, 2,DEFAULT_STACK_SIZE);
mytask1 = execi(&go_trail , 0, NULL, 1,DEFAULT_STACK_SIZE);

tm_start(); // タスクスケジューラー起動 mytask1,mytask2が同時に走る
return 0;
}



以下のプログラム文が吉田のロボットのプログラムソース

// このプログラムは Jiro J. Etoさんのプログラムeto-rover.cを少しだけ変更しています。
// Kosei Demura 2001-5-14
// プログラムを実行する前に光センサが2番ポートへ、モータがA,Cポートに接続されている
// ことを確認してください。
#include "conio.h"
#include "unistd.h"
#include "direct-button.h"
#include "direct-sensor.h"
#include "direct-motor.h"
#include "sys/tm.h"

#define NORM_SPEED 255

pid_t mytask1, mytask2;

// ウエイクアップ評価関数 on-offボタンが押されていることを調べる関数
// ボタンが押されるとき働く
wakeup_t button_press_wakeup(wakeup_t data)
{
return PRESSED(button_state(),data);
}

// ボタンが離されたとき働く
wakeup_t button_release_wakeup(wakeup_t data)
{
return RELEASED(button_state(),data);

}

// 黒線をトレースする関数
static int go_trail(int argc, char **argv)
{
int th = 30; // 照明の明るさによりこの値を変更してください。

ds_active(&SENSOR_2); // アクティブモードで光センサ使用(ポート2番)
motor_a_speed(NORM_SPEED); // モータ速度指定(Aポート)
motor_c_speed(NORM_SPEED);
motor_c_dir(fwd); // モータ回転方向指定(逆回転 Cポート)
motor_a_dir(fwd);

while (1) {
lcd_int(LIGHT_2); // センサの値を液晶パネルに10進数で表示
lcd_refresh(); // 液晶パネル表示更新
if ( LIGHT_2 <= th ){ // 暗いとき
motor_a_dir(fwd);
motor_c_dir(rev);       大嶋のと同じくcポートにrevを加えることによりトーレスをしやすくした
motor_c_speed(40);
motor_a_speed(255);
}else{ // 明るいとき
motor_c_dir(fwd);
motor_a_dir(fwd);
motor_a_speed(255);
motor_c_speed(255);
}
}
}

// RUNボタンを押すとタスクをとめる関数
static int rover_stopper(int argc, char **argv)
{
wait_event(&button_release_wakeup,BUTTON_RUN);
msleep(200);
wait_event(&button_press_wakeup,BUTTON_RUN);

kill(mytask1); // トレースタスクgo_trailを殺す
wait_event(&button_release_wakeup, BUTTON_RUN);

return 0;
}


int main(void)
{
// legOS解析P10のサンプルプログラムとは以下の2行は順番が違う
// 何故かこの順番でないとプログラムがうまく動かない
mytask2 = execi(&rover_stopper,0, NULL, 2,DEFAULT_STACK_SIZE);
mytask1 = execi(&go_trail , 0, NULL, 1,DEFAULT_STACK_SIZE);

tm_start(); // タスクスケジューラー起動 mytask1,mytask2が同時に走る
return 0;
}
/ソースについて/
 私達の班はrevをcポート側に加えることにより、左回りのトレースをしやすくしようと考えた。また、大嶋、吉田それぞれのスピードを早くしたつもりでしたが、車体が重いのかとても動きが鈍かった。また、教室は明るいためthを変えることによりセンサーの反応を良くしようとした。それにより既存のプログラムより大嶋はth=20,吉田はth=30にすることによりセンサーの反応が良くなった。