- 追加された行はこの色です。
- 削除された行はこの色です。
[[2013a/Member]]
-プログラム説明
#define THRESHOLD 37
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B);
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(OUT_B);
#define turn_left1 set_power_L ;\
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 200
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
sub followline_l () {
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP);
MOVETIME=MOVETIME+500;
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP*10);
}
}
sub followline_r () {
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500;
PlaySound(SOUND_DOWN);
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP*10);
}
}
sub followline_l1 () {
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500;
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
Wait(STEP*10);
}
}
}
task main () {
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int nOnline;
int MOVETIME;
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(50);
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(50);
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
turn_right0;
Wait(100);
Off(OUT_AC);
Wait(50);
go_fwd;
Wait(50);
Off(OUT_AC);
Wait(50);
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
turn_left0;
Wait(100);
Off(OUT_AC);
Wait(50);
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(50);
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
while(FastTimer(0)<=500){
followline_l1();
}
PlaySound(SOUND_DOUBLE_BEEP);
turn_left1;
Wait(30);
ClearTimer(0);
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(50);
PlaySound(SOUND_CLICK);
turn_left1;
Wait(20);
ClearTimer(0);
while(FastTimer(0)<=500){
followline_l();
}
}