¼«ºî¤·¤¿¥³¡¼¥¹¤Ë±è¤Ã¤Æ°ì¼þ¤¹¤ë¤¹¤ë¥í¥Ü¥Ã¥È¤òºîÀ®¤»¤è¡£
¤¿¤À¤·¡¢¼¡¤ÎÅÀ¤ËÃí°Õ¤¹¤ë¤³¤È
°ì¿Í¤Ï»þ·×²ó¤êÍÑ¡¢¤â¤¦°ì¿Í¤ÏȾ»þ·×²ó¤¦¤êÍÑ¤Î¥×¥í¥°¥é¥à¤òºîÀ®¤¹¤ë¤³¤È¡Ê¥í¥Ü¥Ã¥ÈËÜÂΤÏƱ°ì¤Î¤â¤Î¤ò»È¤¦¡Ë¡£
¼¡¤Î¥¹¥Æ¥Ã¥×¤Ç¥×¥í¥°¥é¥à¤òºîÀ®¤¹¤ë¤³¤È¡£
»ä¤Ïº¸¼þ¤ê¤òôÅö¤¹¤ë¡£
¸å¤Î¥×¥í¥°¥é¥à¤ÎÀâÌÀ¤Î¤¿¤á¤Ë¥³¡¼¥¹¤ò£³¤Ä¤Ëʬ¤±¤ë¡£
±¦¾å¤Î±ß¤ò¾®±ß¤È¸Æ¤Ö
#define THRESHOLD 43 //ïçÃÍ #define HIPOWER 2¡¡//¹â® #define LOWPOWER 1 //Äã® #define set_power_H SetPower(OUT_AC,HIPOWER); //AC¤ò¹â®¤ÇÆ°¤«¤¹ #define set_power_L SetPower(OUT_AC,LOWPOWER); //AC¤òÄ㮤ÇÆ°¤«¤¹ #define go_forward set_power_H; OnFwd(OUT_AC); //Á°¿Ê #define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C); //º¸ÀÞ¡¡ #define turn_left2 set_power_L; OnRev(OUT_A); OnFwd(OUT_C); //º¸Àû²ó #define turn_left3 set_power_L; OnRev(OUT_A); //±¦¸å¿Ê #define turn_right1 set_power_L; Off(OUT_C); OnFwd(OUT_A); //±¦ÀÞ #define turn_right2 set_power_L; OnRev(OUT_C); OnFwd(OUT_A); //±¦Àû²ó #define arm_hold OnFwd(OUT_B);Wait(50);Off(OUT_B); //´Ì¤òÄϤà #define arm_part OnRev(OUT_B);Wait(50);Off(OUT_B); //´Ì¤òÎ¥¤¹ #define STEP 1 #define nMAX 4 //¥«¥¦¥ó¥¿¤ÎºÇÂç¿ô #define short_break Off(OUT_AC);Wait(50); //¾®µÙ»ß #define CROSS_TIME 40 //¸òº¹ÅÀ¤òÅϤë»þ´Ö #define cross_line set_power_L; OnFwd(OUT_AC); Wait(CROSS_TIME); short_break; //¸òº¹ÅÀ¤òÅϤë #define time0 2000 //¡¤Î»þ´Ö #define time1 700 //¢¤Î»þ´Ö
sub normal_trace() { if (SENSOR_2 < THRESHOLD -1){ turn_left2; } else if (SENSOR_2 < THRESHOLD +3){ turn_left1; } else if (SENSOR_2 < THRESHOLD +7){ go_forward; } else if (SENSOR_2 < THRESHOLD +8){ turn_right1; } else { turn_right2; } }
sub across_line () { int nOnline=0; while(nOnline < nMAX ){ if(SENSOR_2< THRESHOLD -1) { turn_left2; nOnline++; }else{ if(SENSOR_2< THRESHOLD ){ turn_left1; }else if(SENSOR_2< THRESHOLD +4){ go_forward; }else if(SENSOR_2< THRESHOLD +7){ turn_right1; }else{ turn_right2; } nOnline=0; } Wait(STEP); }short_break;PlaySound(2); turn_right1;Wait(nMAX*STEP); cross_line; nOnline=0; }
sub circle_trace() { ClearTimer(0); while(FastTimer(0) <= time1){ if (SENSOR_2 < THRESHOLD -2){ turn_left3; } else if (SENSOR_2 < THRESHOLD -1){ turn_left2; } else if (SENSOR_2 < THRESHOLD +5){ go_forward; } else { turn_right1 } } }
sub can_turn () { set_power_L ; arm_hold; OnFwd(OUT_AC); Wait(200); turn_right2; Wait(500); arm_part; turn_left2 ; Wait(500); }
task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_TOUCH); ClearTimer(0); //¡¡¥¿¥¤¥Þ¡¼¤ò¥ê¥»¥Ã¥È while(FastTimer(0) <= time0){¡¡//¢¤Þ¤Ç°Ê²¼¤Î¥×¥í¥°¥é¥à¤ò·«¤êÊÖ¤¹ if (SENSOR_3 == 1){ //¥¿¥Ã¥Á¥»¥ó¥µ¤¬È¿±þ¤·¤¿¤é¡¡ PlaySound(2); //²»¤ò¤Ê¤é¤·¤Æ can_turn(); //´Ì¤òÂऱ¤ë } else {¡¡//¥¿¥Ã¥Á¥»¥ó¥µ¤¬È¿±þ¤·¤Ê¤«¤Ã¤¿¤é normal_trace(); //¡¡Ä̾ï¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹ } } repeat(3) { //¢¤ËÍ褿¤é¸òº¹ÅÀ¤ò£³²ó¤ï¤¿¤ë across_line(); } circle_trace(); //£¤ËÍ褿¤é¾®±ß¤ò²ó¤ë across_line(); //¾®±ß¤ò¤Ì¤±¤ë while(true){ normal_trace(); //Ä̾ï¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹ } }
¥«¥¦¥ó¥¿¤¬»È¤¨¤º¥¿¥¤¥Þ¡¼¤ËÍê¤è¤¦¤È»×¤Ã¤¿¤¬¡¢¤Þ¤µ¤«¼«Ê¬¤Î¥×¥í¥°¥é¥à¤¬´Ö°ã¤Ã¤Æ¤¤¤ë¤È¤Ï»×¤ï¤Ê¤«¤Ã¤¿¡£¿¼¤¯È¿¾Ê¤·¤¿¤¤¡£
¥¢¡¼¥à¤ÎÀ½ºî¤¬¤¢¤Þ¤ê»þ´Ö¤ò¼è¤ì¤º¡¢´Ê°×¤Ç²õ¤ì¤ä¤¹¤¤¤â¤Î¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¤Î¤¬¾¯¤·¿´»Ä¤ê¤À¤Ã¤¿¡£
Æó¿Í¤Ç¶¨ÎϤ·¤Æ¥í¥Ü¥Ã¥È¤òºî¤Ã¤Æ¤¤¤ì¤Ð¤â¤¦¾¯¤·´°À®ÅÙ¤¬¹â¤¯¤Ê¤Ã¤¿¤«¤â¤·¤ì¤Ê¤¤¡£