Ìܼ¡
#contents

*²ÝÂê2ÆâÍÆ [#vb71dca6]
>2Âæ¤Î¥í¥Ü¥Ã¥È¤Ç¶õ¤­´Ì¤ò¼ý½¸¤·¡¢¥´¡¼¥ë¤Ë¶õ¤­´Ì¤Ë¤Ê¤ë¤Ù¤¯¹â¤¯ÀѤ߾夲¤ë
>
>´ðËܥ롼¥ë
>¶¥µ»»þ´Ö¤Ï¿³È½¤¬Â³¹ÔÉÔǽ¤ÈȽÃǤ¹¤ë¤Þ¤Ç¡¢¤¢¤ë¤¤¤Ï¥ê¥¿¥¤¥¢¤¹¤ë¤Þ¤Ç¡£
>¿Þ¤Îº¸²¼¤Î¶ù¤«¤é¥¹¥¿¡¼¥È¤¹¤ë¡£¥í¥Ü¥Ã¥È¤¬»æ¤«¤é¤Ï¤ß½Ð¤Ê¤¤ÈϰϤDzÄǽ¤Ê¸Â¤ê¤Ë¶ù¤ËÇÛÃÖ¤¹¤ë¡£
>¶õ¤­´Ì¤ò½¸¤á¤Æ¿Þ¤Î¡Ö¥´¡¼¥ë¡×¤È½ñ¤«¤ì¤¿±ß¸Ì¤ÈľÀþ¤Ç°Ï¤Þ¤ì¤ëÎΰè¤Ë¶õ¤­´Ì¤ò±¿¤Ö
>¤Ê¤ë¤Ù¤¯¹â¤¯¶õ¤­´Ì¤òÀѤ߾夲¤ë
>±¿¤Ó½ª¤ï¤Ã¤¿¸å¡¢¤¢¤ë¤¤¤ÏÀѤ߾夲¤¿¸å¤Ï¥í¥Ü¥Ã¥È¤Ï¥´¡¼¥ë¤ÎÎΰ褫¤é³°¤Ë½Ð¤ë¤³¤È¡£¤Þ¤¿¶õ¤­´Ì¤ÈÀÜ¿¨¤·¤Æ¤¤¤¿¤Ï¤¤¤±¤Ê¤¤¡£
>³«»Ï¤Î¹ç¿Þ¤«¤é£µÉÃ°ÊÆâ¤Ë¥¹¥¿¡¼¥È¥Ü¥¿¥ó¤ò²¡¤¹ºî¶È¤ò´°Î»¤¹¤ë¤³¤È¡£
>¶¥µ»¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¡¢¥í¥Ü¥Ã¥È¤Ë¿¨¤Ã¤¿¤ê¿Í´Ö¤¬±ó³Ö¤ÇÁàºî¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
>ÅÓÃæ¤Ç¤¦¤Þ¤¯Æ°¤«¤Ê¤¯¤Ê¤Ã¤¿¾ì¹ç¡¢£±²ó¸Â¤êºÆ¥¹¥¿¡¼¥È¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡ÊºÆ¥¹¥¿¡¼¥È¤ÎºÝ¤ËÊÌ¥×¥í¥°¥é¥à¤Çµ¯Æ°¤·¤Æ¤è¤¤¡Ë¡£

°Ê¾å[[2013b/Mission2]]¤è¤ê°úÍÑ

&aname(map);
¥³¡¼¥¹¿Þ
#ref(robocon2013b.png);

*¥á¥ó¥Ð¡¼ [#zab397a9]
[[dyuma>2013b/Member/dyuma/Mission2]]~
¥í¥Ü¥Ã¥ÈÀ½ºî¡Ê+¥í¥Ü¥Ã¥È´ÉÍý¡Ë¡¦¥×¥í¥°¥é¥ß¥ó¥°¤È¤É¤Á¤é¤â¤³¤Ê¤·¤Æ¤¤¤ëÃæ´Ö´ÉÍý¿¦¡£

[[pepo>2013b/Member/pepo/Mission2]]~
¥í¥Ü¥Ã¥È¤òÁȤޤ»¤¿¤éÈà¤Î±¦¤Ë½Ð¤ë¤â¤Î¤Ï¤¤¤Ê¤¤¡£¡Ê¤¿¤À¤·¾ðÊ󹩳زʡË

michaegon~
¤³¤Î¥Ú¡¼¥¸¤ÎÃø¼Ô~
¥×¥í¥°¥é¥à¤ÎÊý¤ò¤ä¤Ã¤Æ¤Þ¤¹¡£

*¥í¥Ü¥Ã¥È³µÍ× [#t8caacae]
º£²ó»ÈÍѤ·¤¿¥í¥Ü¥Ã¥È¤Ç¤¹¡£Æ¹ÂΤ¬¤«¤Ê¤êŤ¤¤Ç¤¹¡£
#ref(robo2.jpg);
ƹÂÎÃæ±û¤Î¥ì¡¼¥ë¤Ë´Ì¤¬£´ËÜ¤Þ¤ÇÆþ¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
#ref(robo2-1.jpg);
´Ì¤ò¤³¤ÎÏӤDz¥¤Ã¤Æ¥ì¡¼¥ë¤ËÆþ¤ì¤ë»ÅÁȤߤǤ¹¡£
#ref(robo2-2.jpg);
#ref(robo2-3.jpg);
#ref(robo2-4.jpg);
´Ì¤ò´¶ÃΤ¹¤ë¤Î¤Ë¤Ï¤³¤ÎͲ»ÇÈ¥»¥ó¥µ¡¼¤ò»È¤¤¤Þ¤¹¡£
#ref(robo2-7.jpg);
¥ì¡¼¥ë¤Î¸å¤í¤«¤é´Ì¤¬Ï³¤ì¤Ê¤¤¤è¤¦¤Ë¥¹¥È¥Ã¥Ñ¡¼·¯¤¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£
#ref(robo2-8.jpg);
´Ì¤ò¥ì¡¼¥ë¤ËµÍ¤á¹þ¤ó¤À¤é¡¢´Ì¤òÍÞ¤¨¤ë¤¿¤á¤ÎÏӤǴ̤òÍÞ¤¨¤Ê¤¬¤é¥ì¡¼¥ë¼«¿È¤òΩ¤Á¾å¤²¤Þ¤¹¡£
#ref(robo2-5.jpg);
#ref(robo2-6.jpg);

*¥×¥í¥°¥é¥à³µÍ× [#u38c8111]
** ¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Î»ÅÍÍ [#bea8657d]
º£²ó¤âPIDÀ©¸æ¤òÍøÍѤ·¤¿¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤òÁȤó¤Ç¤ß¤Þ¤·¤¿¡£~
Á°²ó¤ÎÈ¿¾Ê¤òÀ¸¤«¤·¤Æ¤è¤ê°ÂÄꤷ¤ÆÀ®¸ù¤Ç¤­¤ë¤â¤Î¤Ë²þÎɤ·¤Þ¤·¤¿¡£
PIDÀ©¸æ¤Ë¤Ä¤¤¤Æ¤Ï[[Á°²ó>2013b/Member/michaegon/Mission1]]¤Î¥Ú¡¼¥¸¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
***¸òº¹ÅÀ¡¦µÞ¥«¡¼¥ÖȽÄê [#dd382873]
´ðËÜŪ¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¥×¥í¥°¥é¥à¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£

 #define SPEED 32
 #define KP 1.6
 #define KI 0.00002
 #define KD 0.8
 #define THRESHOLD 50
 #define THRESHOLD2 32
 #define RIGHT 1
 #define LEFT -1
 #define DT 1
 #define CT 250
 
 int dev[2]; // Êк¹
 float integral;
 
 // ÁàºîÎ̤òÊÖ¤¹´Ø¿ô
 inline int ope_amount()
 {
  float pid;
  int result;
 
  dev[0]=dev[1]; // ²áµî¤ÎÊк¹
  dev[1]=SENSOR_1-THRESHOLD; // ¸½ºß¤ÎÊк¹
 
  if (dev[0]==dev[1]) { // ÉÔÍפˤʤ俤éintegral¥ê¥»¥Ã¥È
     integral=0;
  }
  integral+=(dev[1]+dev[0])*DT/2; // ÀÑʬ·×»»
 
  pid=KP*dev[1]+KI*integral+KD*(dev[1]-dev[0])/DT; // PID
 
  result=pid; // int·¿¤ËÊÑ´¹
  /*¥·¥ó¥¯¥íΨ¤ÎÈϰϤˤª¤µ¤á¤ë*/
  if (result>100) {
     result=100;
  } else if (result<-100) {
     result=-100;
  }
 
  return result;
 }
 
 /*
  ¹õÀþ¤Î¡¢¤È¤¢¤ë¦¤òÁö¹Ô¤¹¤ë´Ø¿ô¡Ê¼ÖÀþÊѹ¹¤Ä¤­¡Ë
 */
 inline void go_xside(int sgn)
 {
  while (true) {
        OnFwdSync(OUT_BC,SPEED,ope_amount()*sgn);
        Wait(DT);
        if (SENSOR_1<THRESHOLD2) {
           OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn);
           Wait(CT);
           break;
 
        }
  }
 }
 
 task main()
 {
  while (true) {
        go_xside(RIGHT);
        go_xside(LEFT);
  }
 }
¤³¤Î¥×¥í¥°¥é¥à¤ÏÁ°²óƱÍÍ¡¢PIDÀ©¸æ¤ò»È¤Ã¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤·¤Æ¤¤¤Þ¤¹¡£~
Á°²ó¤Ï¡¢¥³¡¼¥¹¤Î·Á¾õ¤òÍøÍѤ·¤ÆÎϵ»¤Ç¸òº¹ÅÀ¤òÆÍÇˤ¹¤ë¥×¥í¥°¥é¥à¤À¤Ã¤¿¤»¤¤¤Ç¡¢¤º¤¤¤Ö¤ó¥³¡¼¥¹£±¼þ²ó¤ê¤­¤ì¤ë³ÎΨ¤¬Ä㤤¤Î¤¬·èÄêŪ¤Ê·çÅÀ¤Ç¤·¤¿¡£~
¤½¤³¤Ç¡¢º£²ó¤Ï¤â¤Ã¤ÈÀ®¸ùΨ¤¬¹â¤¤¸òº¹ÅÀÄ̲áÊýË¡¤ò¹Í¤¨¤Þ¤·¤¿¡£~
#ref(cross.png);
º£²ó¤ÏïçÃͤò¥é¥¤¥ó¤Î¶­³¦¾å¤È¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²Ãʳ¬¤ËÀßÄꤷ¤Þ¤·¤¿¡Ê¥é¥¤¥ó¤ÎÃæ±û¤Ë¹Ô¤¯¤Û¤É¸÷¥»¥ó¥µ¡¼¤ÎÃͤϾ®¤µ¤¯¤Ê¤ê¤Þ¤¹¡Ë¡£~
ľÀþ¤ä¥«¡¼¥Ö¤Î³°Â¦¡¢´Ë¤ä¤«¤Ê¥«¡¼¥Ö¤ÎÆâ¦¤òÁö¤Ã¤Æ¤¤¤ë¤È¤­¤Ï¡¢¥é¥¤¥ó¤Î¶­³¦¾åÉÕ¶á¤òÁö¹Ô¤·¤Æ¤¤¤Þ¤¹¤¬¡¢µÞ¥«¡¼¥Ö¤ÎÆâ¦¤ä¸òº¹ÅÀ¤Ëº¹¤·³Ý¤«¤ë¤È¡¢¥í¥Ü¥Ã¥È¤¬¥³¡¼¥¹¤ÎÊѲ½¤ËÄɤ¤¤Ä¤±¤º¤Ë¥é¥¤¥óÃæ±ûÉÕ¶á¤Î£²¤ÄÌܤÎïçÃͤò±Û¤¨¤Æ¤­¤Þ¤¹¡£~
¤¹¤ë¤È¡¢go_xsideÆâ¤Îifʸ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

 if (SENSOR_1<THRESHOLD2) {
     OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn); // Ä̾ï¤È¤ÏµÕ¸þ¤­¤Ø¶Ê¤¬¤ë
     Wait(CT);
     break;
 }

¤³¤Îifʸ¤Ç¤ÏÄ̾ï¥é¥¤¥óÆâ¤Ë¥í¥Ü¥Ã¥È¤¬Æþ¤Ã¤¿¤È¤­¡¢¥é¥¤¥ó³°¤Ø¸þ¤±¤Æ¶Ê¤¬¤ê¤À¤¹¤È¤³¤í¤òCT¥ß¥êÉô֤À¤±¥é¥¤¥ó¤ÎÆâ¦¤Ë¸þ¤±¤ÆÁö¤ê¤Þ¤¹¡£~
¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢¥é¥¤¥óÃæ±û¤ò¼Ð¤á¤Ë²£Àڤäƥ饤¥ó¤ÎÈ¿ÂЦ¡Ê¥«¡¼¥ÖÃæ¤Ê¤é¥«¡¼¥Ö¤Î³°Â¦¡¢¸òº¹ÅÀ¤Ê¤é¸òº¹ÅÀÃæ±û¡Ë¤Ø°Üư¤·¤Þ¤¹¡£~
¤³¤Î¤è¤¦¤Ë¡¢¸òº¹ÅÀ¤ò¼Ð¤á¤Ë²£ÀڤäƤ錄¤ê¤­¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£~
¤³¤ÎÊýË¡¤Ç¤Ï¡¢Á°²ó¤ÎÎϵ»Ä̲á¤è¤ê¤âKI¤Ê¤É¤ÎÃͤäÅÅÃÓ»ÄÎ̤ʤɤËÀ®¸ùΨ¤¬º¸±¦¤µ¤ì¤º¤Ë°ÂÄꤷ¤¿Áö¹Ô¤ò¼Â¸½¤Ç¤­¤ë¤¦¤¨¡¢¤É¤Ã¤Á¼þ¤ê¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ¤â£±¼þ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¢­°Ê¾å¤òÍøÍѤ·¤Æ¡¢º£²ó¤Î¤¿¤á¤Ëºî¤Ã¤¿¥×¥í¥°¥é¥à¤Ç¤¹¡£
*** TIRE_main.nxc [#e1f19394]
¥¿¥¤¥ä¤òÀ©¸æ¤·¤Æ¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£~

 #define SPEED 33
 #define SPEED2 20
 #define KP 7
 #define KI 0.002
 #define KD 1.8
 #define THRESHOLD 20
 #define THRESHOLD2 10
 #define RIGHT 1
 #define LEFT -1
 #define DT 1
 #define CT 1200
 #define ARM 1
 #define FIRST_T 5000
 
 void turn_right()
 {
  OnFwd(OUT_C,SPEED2);
  OnFwd(OUT_B,-SPEED2);
 }
 
 void turn_left()
 {
  OnFwd(OUT_B,SPEED2);
  OnFwd(OUT_C,-SPEED2);
 } 
 
 void start_action()
 {
  // BluetoothÀܳ¤Î³Îǧ
  until (BluetoothStatus(ARM)==NO_ERR);
  PlaySound(SOUND_UP); 
 
  // ¥¹¥¿¡¼¥ÈÃÏÅÀ¤«¤é¥³¡¼¥¹¤Ë¾è¤ë¤Þ¤Çľ¿Ê
  OnFwdSync(OUT_BC,SPEED,0);
  until (SENSOR_1<THRESHOLD);
  Off(OUT_BC);
 } 
 
 void can_build2()
 {
  // ¿Þ¤Î±¦¤«¤é¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÆþ¤ë¤È¤¹¤ë
  turn_right();
  Wait(CT);
  Off(OUT_BC);
  // ÀѤ߾夲»ØÎá¤òÁ÷¤ë
  SendRemoteNumber(ARM,MAILBOX3,1);
  // ÀѤ߾夲´°Î»¤Î¹ç¿Þ¤òÂÔ¤Ä
  int msg;
  do {
     msg=0;
     ReceiveRemoteNumber(MAILBOX4,true,msg);
  } while (!msg);
 } 
 
 void can_build1()
 {
  // ¿Þ¤Î±¦¤«¤é¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÆþ¤ë¤È¤¹¤ë
  turn_left();
  Wait(CT*4);
  Off(OUT_BC);
  // ¥´¡¼¥ë±ü¤Ø°Üư
  OnFwd(OUT_BC,SPEED);
  Wait(CT*4);
  Off(OUT_BC);
  // ÀѤ߾夲»ØÎá¤òÁ÷¤ë
  SendRemoteNumber(ARM,MAILBOX3,1);
  // ÀѤ߾夲´°Î»¤Î¹ç¿Þ¤òÂÔ¤Ä
  int msg;
  do {
     msg=0;
     ReceiveRemoteNumber(MAILBOX4,true,msg);
  } while (!msg);
  // ¥Ð¥Ã¥¯¤Ç¸òº¹ÅÀ¤Þ¤ÇÌá¤Ã¤Æ»ß¤Þ¤ë
  OnFwd(OUT_BC,-SPEED);
  Wait(CT*5);
  Off(OUT_BC);
  SendRemoteNumber(ARM,MAILBOX5,1);
 }
 
 void end_action()
 {
  // ¤«¤Ê¤ê¸å¤í¤Ë²¼¤¬¤ë
  OnFwd(OUT_BC,-SPEED);
  Wait(FIRST_T);
  turn_right();
  Wait(CT);
  // ¥³¡¼¥¹³°¤ØÎ¥Ã¦
  OnFwd(OUT_BC,100);
  Wait(FIRST_T*2);
  PlaySound(SOUND_UP);
 }
 
 // ´Ì¤¬¤¢¤ë¤«¤É¤¦¤«È½Äꤹ¤ë´Ø¿ô
 int iscan()
 {
  if (SensorUS(S2)<=10) { // Ͳ»ÇÈ¥»¥ó¥µ¡¼¤¬10cm°ÊÆâ¤ò´¶ÃÎ
     return 1;
  } else {
     return 0;
  }
 }
 
 // ´Ì¤Î½³¤ê¾å¤²¤òÌ¿Î᤹¤ë´Ø¿ô
 void kick()
 {
  OnFwdSync(OUT_BC,SPEED,0);
  Wait(CT);
  Float(OUT_BC);
  // Bluetooth¤ÇÄÌ¿®¤·¤Æ½³¤ê¾å¤²¤ò¼Â¹Ô
  SendRemoteNumber(ARM,MAILBOX1,1);
  int msg=0;
  do {
     ReceiveRemoteNumber(MAILBOX2,true,msg);
  } while (!msg);
 }
  
 int dev[2];
 int flag,count;
 float integral;
 
 inline int ope_amount()
 {
  float pid;
  int result;
 
  dev[0]=dev[1]; // ²áµî¤ÎÊк¹
  dev[1]=SENSOR_1-THRESHOLD; // ¸½ºß¤ÎÊк¹
 
  if (dev[0]==dev[1]) { // ÉÔÍפˤʤ俤éintegral¥ê¥»¥Ã¥È
     integral=0;
  }
  integral+=(dev[1]+dev[0])*DT/2; // ÀÑʬ·×»»
 
  pid=KP*dev[1]+KI*integral+KD*(dev[1]-dev[0])/DT; // PID
 
  result=pid; // int·¿¤ËÊÑ´¹
  /*¥·¥ó¥¯¥íΨ¤ÎÈϰϤˤª¤µ¤á¤ë*/
  if (result>100) {
     result=100;
  } else if (result<-100) {
     result=-100;
  }
 
  return result;
 }
 
 inline void go_xside(int sgn,int change)
 {
  while (true) {
        OnFwdSync(OUT_BC,SPEED,ope_amount()*sgn);
        Wait(DT);
        if (SENSOR_1<THRESHOLD2) {
           OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn);
           Wait(CT);
           PlaySound(SOUND_UP);
           break;
        }
        if (iscan()) {
           kick();
           count++;
           if (count==change) {
              flag++;
              break;
           }
        }
  }
 }
 
 inline void go_xside2(int sgn)
 {
  while (true) {
        OnFwdSync(OUT_BC,SPEED,ope_amount()*sgn);
        Wait(DT);
        if (SENSOR_1<THRESHOLD2) {
           count++;
           OnFwdSync(OUT_BC,SPEED,-ope_amount()*sgn);
           Wait(CT);
           PlaySound(SOUND_UP);
           break;
        }
  }
 }
 
 inline void go_xside3(int sgn)
 {
  while (true) {
        OnFwdSync(OUT_BC,SPEED2,ope_amount()*sgn);
        Wait(DT);
        if (SENSOR_1<THRESHOLD2) {
           count++;
           OnFwdSync(OUT_BC,SPEED2,-ope_amount()*sgn);
           Wait(CT);
           PlaySound(SOUND_UP);
           break;
        }
  }
 }
 
 // £±²óÌÜ
 // ´Ì¤ò4¤Ä½¸¤á¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÅþ㤹¤ë¤Þ¤Ç
 void phase1()
 {
  count=0;
  flag=0;
  while (true) {
        go_xside(LEFT,4);
        if (flag) {
           break;
        }
        go_xside(RIGHT,4);
        if (flag) {
           break;
        }
  }
  count=0;
  flag=0;
  while (true) {
        go_xside2(LEFT);
        if (count==3){
           break;
        }
        go_xside2(RIGHT);
        if (count==3){
           break;
        }
  }
  Off(OUT_BC);
 }
 
 // £²²óÌÜ
 // ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤«¤é¥¹¥¿¡¼¥È¤·¡¢
 // ´Ì¤ò4¤Ä½¸¤á¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤Þ¤ÇÌá¤Ã¤Æ¤¯¤ë¤È¤³¤í¤Þ¤Ç
 void phase2()
 {
  turn_right();
  Wait(CT*4);
  count=0;
  // ¥Ø¥¢¥Ô¥ó¤Þ¤Ç
  while (true) {
        go_xside2(LEFT);
        if (count==2) {
           break;
        }
        go_xside2(RIGHT);
        if (count==2) {
           break;
        }
  }
  // ¸þ¤³¤¦´ß¤Ø°Üư
  Wait(CT*4);
  OnFwd(OUT_BC,SPEED);
  Wait(FIRST_T);
  count=0;
  flag=0;
  // ´Ì½¸¤á
  while (true) {
        go_xside(LEFT,4);
        if (flag) {
           break;
        }
        go_xside(RIGHT,4);
        if (flag) {
           break;
        }
  }
  count=0;
  // ¥Þ¥Ã¥×°Üư
  while (true) {
        go_xside3(LEFT);
        if (count==2) {
           break;
        }
        go_xside3(RIGHT);
        if (count==2) {
           break;
        }
  }
  Wait(CT);
  count=0;
  while (true) {
        go_xside2(LEFT);
        if (count==3) {
           break;
        }
        go_xside2(RIGHT);
        if (count==3) {
           break;
        }
  }
  Off(OUT_BC);
 }
 // ¥é¥¤¥ó¥È¥ì¡¼¥¹ÍÑ¥¿¥¤¥äÀ©¸æÂ¦¥×¥í¥°¥é¥à(MASTER)
 //mainÉôʬ
 
 task main()
 {
  SetSensorLight(S1);
  SetSensorLowspeed(S2);
  
  // ¥¹¥¿¡¼¥ÈÃÏÅÀ¤«¤é¥³¡¼¥¹¤Ë¾è¤ë¤Þ¤Ç¤Î¹Ôư
  start_action();
 
  // ´Ì½¸¤á¤È´Ì·ú¤Æ¤½¤ì¤¾¤ì2²ó¤º¤Ä
  phase1();
  can_build1();
  phase2();
  can_build2();
 
  // ¥³¡¼¥¹³°¤Ø¤ÎΥæ¤òÄêµÁ
  end_action();
 
 }

¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¤Î¤è¤¦¤Ë¥³¡¼¥¹¤ò²ó¤Ã¤Æ´Ì¤ò£´¤Ä½¸¤á¤Æ¤Ï¥´¡¼¥ë¤Ë¸þ¤«¤¤¡¢·ú¤Æ½ª¤ï¤ì¤Ð¤Þ¤¿£´¤Ä½¸¤á¤Æ¥´¡¼¥ë¤Ë¸þ¤«¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
#ref(map2.png);
¤Þ¤ºphase1()¤Ç¤Ï¾å¿Þ¤Î­¡¡ÊÀÖ¡Ë¡¢­¢¡ÊÎСˤΤ褦¤Ë¿Ê¤ó¤Ç¤¤¤­¤Þ¤¹¡£¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¤¿¤á¤Ë¥¤¥ó¥é¥¤¥ó´Ø¿ôgo_xside¤¬Æ¯¤¤¤Æ¤¤¤Þ¤¹¡£¤³¤ÎºÇÃæ¡¢´Ì¤ò´¶ÃΤ¹¤ëiscan´Ø¿ô¤¬Æ°¤¤¤Æ¤¤¤Æ¡¢´Ì¤¬¤¢¤ì¤Ð¥¢¡¼¥à¤¬Æ°¤¤¤Æ´Ì¤ò¤±¤ê¾å¤²¤Æ¥ì¡¼¥ë¤ËÆþ¤ì¤ëưºî¤ò»Ø¼¨¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£´Ì¤òÆþ¤ì¤ëưºî¤ÎÊý¤ÏARM_main.nxc¤ÎÊý¤Ë½ñ¤«¤ì¤Æ¤¤¤Æ¡¢¥¹¥ì¡¼¥Ö¦¤¬¹Ô¤¤¤Þ¤¹¡£~
´Ì¤ò£´¤Ä½¸¤á½ª¤ï¤ë¤Ègo_xside2¤ËÀÚ¤êÂØ¤ï¤ê¤Þ¤¹¡£¤³¤Î´Ø¿ô¤Ç¤Ï¸÷¥»¥ó¥µ¡¼¤¬THRESHOLD2°Ê²¼¡¢¤Ä¤Þ¤ê¸òº¹ÅÀ¡¢µÞ¥«¡¼¥ÖȽÄê¤ò¤·¤¿²ó¿ô¤¬¹ç·×£³²ó¡Ê£´¤ÄÌܤδ̤ò¸«¤Ä¤±¤¿¸å¤Ë¥´¡¼¥ë¤Þ¤Ç¤ËǧÃΤ¹¤ë¿ô¡Ë¤Ë¤Ê¤ë¤È´Ì¤ò·ú¤Æ¤ë¤¿¤á¤Î°Üưºî¶Ècan_build1¤¬»Ï¤Þ¤ê¤Þ¤¹¡£~

can_build1¤Ç¤Ï¤Þ¤º¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤Ç£´£µÅÙ±¦¤ËÀû²ó¤·¤Æ¤½¤Î¸åľ¿Ê¤·¤Æ¥´¡¼¥ëÃæ±ü¤Ë°Üư¤·¤Æ´Ì¤ò·ú¤Æ¤ëºî¶È¤ò¤¹¤ë¤è¤¦¤Ë¥¹¥ì¡¼¥Ö¤Ë»Ø¼¨¤òÁ÷¤ê¤Þ¤¹¡£~
·ú¤Æ½ª¤ï¤Ã¤¿¤È¤¤¤¦»Ø¼¨¤ò¼õ¤±¼è¤ë¤È¡¢¥Ð¥Ã¥¯¤·¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤ËÌá¤ê¤Þ¤¹¡£~
¤³¤Î¤¢¤È¡¢£²²óÌܤδ̽¸¤á¤Î¤¿¤á¤Ëphase2¤Ë°Ü¤ê¤Þ¤¹¡£

phase2¤Ç¤Ï¾å¿Þ¤Î­£¡ÊÀġˤΤ褦¤Ë¿Ê¤ó¤Ç¤¤¤­¤Þ¤¹¡£~
go_xside´Ø¿ô¤¬Æ¯¤¤¤Æ¤¤¤Æ¡¢¥´¡¼¥ë¤«¤é½Ðȯ¤·¤¿¸å¡¢¥Ø¥¢¥Ô¥ó¥«¡¼¥Ö¤Î¤È¤³¤í¤«¤éľ¿Ê¤·¤ÆÎ٤Υ³¡¼¥¹¤Ø°Üư¤·¤Æ¡¢´Ì¤ò½¸¤á¤Æ¤­¤Þ¤¹¡£½¸¤á½ª¤ï¤Ã¤¿¤égo_xside3¤¬Æ¯¤¤¤Æ£²¤Ä¤Î¥³¡¼¥¹¤Î¤Ä¤Ê¤®Ìܤò°Üư¤·¤Þ¤¹¡£¤½¤Î¸å¡¢go_xside2¤ò»È¤Ã¤Æ¥´¡¼¥ëÁ°¤Î¸òº¹ÅÀ¤Þ¤Ç°Üư¡¢¤½¤Î¸å¡¢´Ì¤ò·ú¤Æ¤ë¤¿¤á¤Îcan_build2¤Ë°Ü¤ê¤Þ¤¹¡£

can_build2¤Ç¤Ï¡¢¸òº¹ÅÀ¤Ç±¦£´£µÅÙ¤ËÀû²ó¤·¤¿¤¢¤È¡¢¤½¤Î¾ì¤Ç´Ì¤ò·ú¤Æ¤ë¤è¤¦¤Ë¥¹¥ì¡¼¥Ö¦¤Ë»Ø¼¨¤ò½Ð¤·¤Þ¤¹¡£´Ì¤ò·ú¤Æ½ª¤ï¤Ã¤¿¤È¤¤¤¦»Ø¼¨¤ò¼õ¤±¼è¤ë¤È¡¢¥³¡¼¥¹¤òΥæ¤·¤Æ½ªÎ»¤¹¤ë¤¿¤á¤Îend_action´Ø¿ô¤Ë°Ü¤ê¤Þ¤¹¡£

end_action¤Ç¤Ï¡¢·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤¤è¤¦¤Ë¡¢½½Ê¬²¼¤¬¤Ã¤¿¤¢¤È¡¢Àû²ó¸å¡¢Ä¾¿Ê¤·¥³¡¼¥¹¤«¤éΥæ¤·¤Æ½ªÎ»¤·¤Þ¤¹¡£

** ´Ì¤òư¤«¤¹Éôʬ¤Î»ÅÍÍ [#bd227f2c]
*** ARM_main.nxc [#gc20b1f4]
¥¢¡¼¥àÀ©¸æ¤ò¤¹¤ëÊý¤Î¥á¥¤¥óÉôʬ¤Ç¤¹¡£~
¥Þ¥¹¥¿¡¼¤Ç¤¢¤ë¾å¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë¥×¥í¥°¥é¥à¤Ç¤¢¤ëTIRE_main.nxc¤«¤é¤Î»Ø¼¨¤ò¼õ¤±¼è¤Ã¤Æ´Ì¤ò²ó¼ý¤·¤¿¤ê¡¢´Ì¤ò·ú¤Æ¤¿¤ê¤È¤¤¤Ã¤¿¹Ôư¤ò¤·¤Þ¤¹¡£

 #define DT 1
 #define CT 250
 
 // ½³¤ê¾å¤²
 void hit()
 {
  // ½³¤ê
  RotateMotor(OUT_A,100,270);
  Wait(3000);
  Off(OUT_A);
  Wait(DT);
  // Ìᤷ
  RotateMotor(OUT_A,-20,270);
  Wait(3000);
  Off(OUT_A);
  Wait(DT);
  SendResponseNumber(MAILBOX2,1);
  PlaySound(SOUND_UP);
 }
 
 void build()
 {
  // ÍÞ¤¨¥¢¡¼¥à¤òư¤«¤¹
  RotateMotor(OUT_C,20,120);
  Wait(CT);
  Off(OUT_C);
  // ¾å¤²¤ë
  ResetTachoCount(OUT_B);
  while (MotorTachoCount(OUT_B)>-20) {
        OnFwdReg(OUT_B,-15,OUT_REGMODE_SPEED);
        PlaySound(SOUND_UP);
  }
  Off(OUT_B);
  // ÍÞ¤¨³°¤¹
  RotateMotor(OUT_C,-20,120);
  Wait(CT);
  Off(OUT_C);
  // ·ú¤Æ½ª¤ï¤ê¤Î¹ç¿Þ
  SendResponseNumber(MAILBOX4,1);
 
  // ¼ýǼ¹ç¿Þ¤òÂÔ¤Ä
  int ord=0;
  do {
     ReceiveRemoteNumber(MAILBOX5,true,ord);
  } while (!ord);
 
  // ¼ýǼ
  ResetTachoCount(OUT_B);
  while (MotorTachoCount(OUT_B)<30) {
        OnFwdReg(OUT_B,1,OUT_REGMODE_SPEED);
        PlaySound(SOUND_DOWN);
  }
  Off(OUT_B);
  Wait(DT);
 }
 
 // ¥¢¡¼¥àÉômain
 task main()
 {
  int msg;
  while (true) {
        msg=0;
        // ½³¤ê¾å¤²¤ò»ØÎá¤ò³Îǧ
        ReceiveRemoteNumber(MAILBOX1,true,msg);
        if (msg) {
           msg=0;
           hit();
        }
        // ´Ì·ú¤Æ¤Î»ØÎá¤ò³Îǧ
        ReceiveRemoteNumber(MAILBOX3,true,msg);
        if (msg) {
           msg=0;
           build();
        }
  }
 }

´Ì¤ò½¸¤á¤ëÃʳ¬¤Ç¤Ï¡¢¥Þ¥¹¥¿¡¼¤ÎÊý¤¬´Ì¤ò¸«¤Ä¤±¤ë¤È¡¢´Ì¤ò¥ì¡¼¥ë¤Ë½³¤ê¤¤¤ì¤ëhit´Ø¿ô¤òư¤«¤¹¤è¤¦¤Ë»Ø¼¨¤¬Á÷¤é¤ì¤Æ¤­¤Þ¤¹¡£´Ø¿ôhit¤Ç¤Ï¥¢¡¼¥à¤Ç´Ì¤òÅݤ·¤¿¸å¤½¤Î¤Þ¤Þ¥ì¡¼¥ë¤Ë½³¤ê¤¤¤ì¤Þ¤¹¡£
#ref(robo2-4.jpg);

´Ì¤ò·ú¤Æ¤ëÃʳ¬¤Ë¤Ê¤ë¤È¡¢¥Þ¥¹¥¿¡¼¤ÎÊý¤«¤é»Ø¼¨¤¬Á÷¤é¤ì¤Æ¤­¤Æ¡¢´Ì¤ò·ú¤Æ¤ëºî¶È¤ò¤¹¤ë´Ø¿ôbuild¤òư¤«¤·¤Þ¤¹¡£~
´Ø¿ôbuild¤Ç¤Ï¡¢·ú¤Æ¤ë¤È¤­¤Ë¥¿¥ï¡¼¤Î²¼¤ÎÊý¤ò»Ù¤¨¤ë¤¿¤á¤ÎÏÓ¤òư¤«¤·¤Æ´Ì¤¬Åݤì¤Ê¤¤¤è¤¦¤Ë¤·¤¿¸å¡¢¥ì¡¼¥ë¼«ÂΤò·ú¤Æ¤Æ´Ì¤ò·ú¤Æ¤Þ¤¹¡£~
#ref(robo2-6.jpg);
´Ì¤ò·ú¤Æ½ª¤¨¤¿¤é¥Þ¥¹¥¿¡¼¤ÎÊý¤Ë»Ø¼¨¤òÁ÷¤ê¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¼è¤Ã¤¿¥Þ¥¹¥¿¡¼Â¦¤Ï¡¢¥ì¡¼¥ë¤ä¥¢¡¼¥à¤ò³ÊǼ¤·¤¿¤È¤­¤Ë·ú¤Æ¤¿´Ì¤Ë¤Ö¤Ä¤«¤é¤Ê¤¤ÄøÅ٤˲¼¤¬¤Ã¤¿¸å¡¢¥¹¥ì¡¼¥Ö¦¤Ë¥¢¡¼¥à¤Ê¤É¤Î³ÊǼ¤Î»Ù»ý¤òÁ÷¤Ã¤Æ¤­¤Þ¤¹¡£¤³¤Î»Ø¼¨¤ò¼õ¤±¤¿¥¹¥ì¡¼¥Ö¦¤Ï³ÊǼºî¶È¤ò¤·¤Þ¤¹¡£~
³ÊǼºî¶È¤¬½ª¤ï¤ë¤È¡¢¥Þ¥¹¥¿¡¼Â¦¤Ë»Ø¼¨¤ò½Ð¤·¤Æ¡¢ºÆ¤Ó´Ì½¸¤á¤Îºî¶È¤Ê¤É¤ËÌá¤ê¤Þ¤¹¡£
*¼ÂºÝ¤Ëư¤«¤·¤Æ¤ß¤¿... [#x7f1c2ad]
¾å¤Ç¤Ï¤º¤¤¤Ö¤ó¥¹¥à¡¼¥º¤Ë´Û¤ò·ú¤Æ¤ëºî¶È¤Þ¤Ç¤¤¤±¤ë¤è¤¦¤Ê¤³¤È¤ò½ñ¤¤¤Æ¤Þ¤¹¤¬¡¢¼ÂºÝ¤ä¤Ã¤Æ¤ß¤ë¤È¤Þ¤Ã¤¿¤¯¤¦¤Þ¤¯¤¤¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£

´Ì¤ò½³¤ê¤¤¤ì¤Æ´Ì¤ò½¸¤á¤ëºî¶È¤ÏͽÁ۰ʾå¤Ë¤¦¤Þ¤¯¤¤¤­¤Þ¤·¤¿¡£¤¿¤À¤·¡¢ËÜÂΤ¬¤ä¤¿¤é¤ÈŤ¤¤Î¤Ç¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤ÎºÇÃæ¤Ë¥«¡¼¥Ö¤ò¶Ê¤¬¤Ã¤¿¤ê¤·¤Æ¤¤¤ë¤È¡¢¤½¤ÎŤ¤ËÜÂΤǥ³¡¼¥¹¾å¤Î´Ì¤ò¤Ê¤®Åݤ·¤Æ¤·¤Þ¤¤´Ì¤¬¼è¤ì¤Ê¤¤¾õ¶·¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£

¤Þ¤¿¡¢ËÜÂΤ¬½Å¤¹¤®¤Æ¸åÎØ¤¬³ê¤é¤«¤Ëư¤«¤º¤Ë¤½¤â¤½¤â¤¦¤Þ¤¯¿Ê¤ß¤Þ¤»¤ó¤Ç¤·¤¿¡£¤³¤Î¤»¤¤¤Ç¥é¥¤¥ó¥È¥ì¡¼¥¹¤¬ÉÔ°ÂÄê¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¡¢¥´¡¼¥ë¤Ë¤¿¤É¤êÃ失¤Þ¤»¤ó¤Ç¤·¤¿¡£

´Ì¤ò·ú¤Æ¤ëºî¶È¤Ë¤Ä¤¤¤Æ¤â¡¢´Ì¤òÅݤµ¤Ê¤¤¤è¤¦¤Ë¤æ¤Ã¤¯¤ê¤È¥ì¡¼¥ë¤ò·ú¤Æ¤ëͽÄê¤Ç¤·¤¿¤¬¡¢¤æ¤Ã¤¯¤ê¾å¤²¤ë¤¿¤á¤Ë¥â¡¼¥¿¡¼¤Î¥Ñ¥ï¡¼¤ò¤«¤Ê¤êÄã¤á¤Ë¤·¤Æ¥ì¡¼¥ë¤ò·ú¤Æ¤è¤¦¤È¤¹¤ë¤È¡¢¥ì¡¼¥ë¤È´Ì¤Î½Å¤µ¤Ç¤¦¤Þ¤¯¾å¤¬¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£¤À¤«¤é¤È¤¤¤Ã¤Æ¡¢¤¢¤Þ¤ê¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤ÈÀª¤¤¤¬¤Ä¤­¤¹¤®¤Æ´Ì¤¬ÅÝ¤ì¤Æ¤·¤Þ¤¦¿´ÇÛ¤¬¤¢¤Ã¤¿¤Î¤Ç¥Ñ¥ï¡¼¤ò¾å¤²¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£

*È¿¾ÊÅÀ¡¦²þÁ±ÅÀ [#p4525d91]
**¥í¥Ü¥Ã¥È¤Ë¤Ä¤¤¤Æ [#r5322306]
¼ÂºÝ¤Ëư¤«¤·¤Æ¤ß¤ë¤ÈÁ´Á³¤¦¤Þ¤¯¤¤¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£~
¤³¤ì¤ò²þÁ±¤¹¤ë¤Ë¤Ï¡¢¤Þ¤º¥í¥Ü¥Ã¥È¤ò¤â¤Ã¤È;͵¤Î¤¢¤ëÀ߷פˤ¹¤ë¤Ù¤­¤À¤È»×¤¤¤Þ¤·¤¿¡£~
¤¿¤È¤¨¤Ð¡¢¸åÎØ¤ò¤â¤Ã¤È¶¯²½¤·¤Æ¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤Ë»Ù¾ã¤¬½Ð¤Ê¤¤¤è¤¦¤Ë½ÐÍè¤ì¤Ð¤è¤«¤Ã¤¿¤Ç¤¹¡£~
¤Þ¤¿¡¢´Ì¤ò·ú¤Æ¤ë¤È¤­¤Ë¥ì¡¼¥ë¤ò¾å¤²¤ë¤¿¤áưÎϤȤ·¤Æ¥â¡¼¥¿¡¼¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¥ì¡¼¥ë¤È¥â¡¼¥¿¡¼¤Î´Ö¤Ë¤â¤Ã¤È¥®¥¢¤òÉÕ¤±¤Æ¥â¡¼¥¿¡¼¤ò¤¿¤¯¤µ¤ó²ó¤·¤Æ¤â¾¯¤·¤º¤Ä¤·¤«¥ì¡¼¥ë¤¬Æ°¤«¤Ê¤¤¤è¤¦¤Ë¤¹¤ì¤Ð¡¢´Ì¤¬Åݤ줿¤ê¡¢¥ì¡¼¥ë¤¬»ý¤Á¾å¤¬¤é¤Ê¤¤¤È¤¤¤Ã¤¿¿´ÇÛ¤¬²ò¾Ã¤Ç¤­¤¿¤È»×¤¤¤Þ¤¹¡£

**¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ [#nbbe1536]
¥é¥¤¥ó¥È¥ì¡¼¥¹Éôʬ¤Ë¤Ä¤¤¤Æ¤Ï¡¢Á°²ó¤Î²ÝÂê¤Î»þ¤è¤ê¤â¤è¤ê°ÂÄꤷ¤¿»ÅÁȤߤˤ·¤¿¤Ä¤â¤ê¤Ç¤·¤¿¤¬¡¢Â礭¤¤Æ¹ÂΤΥí¥Ü¥Ã¥ÈÍѤËÄ´À°¤¬¤¦¤Þ¤¯¤¤¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£¤ä¤Ï¤êPIDÀ©¸æ¤Ï³Æ¼ï¥²¥¤¥ó¤ÎÃͤÎÎɤ¤Ä´À°ÊýË¡¤ò³ÎΩ¤·¤Ê¤¤¤ÈÆñ¤·¤«¤Ã¤¿¤Ç¤¹¡£

´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ë¤Ä¤¤¤Æ¤â¡¢·ë¹½Â绨ÇÄ¤ÊÆ°ºî¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤È»×¤¤¤Þ¤¹¡£´Ì¤ò½³¤ê¤¤¤ì¤ëÉôʬ¤Ï¥í¥Ü¥Ã¥È¤ÎÊý¤¬¤¦¤Þ¤¯ºî¤ì¤Æ¤¤¤¿¤Î¤Ç¤¦¤Þ¤¯¤¤¤­¤Þ¤·¤¿¤¬¡¢´Ì¤ò·ú¤Æ¤ëÉôʬ¤Ï¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤â²þÁ±¤¹¤Ù¤­¤À¤È»×¤¤¤Þ¤·¤¿¡£¥ì¡¼¥ë¤ò¾å¤²¤ëºî¶È¤Ç¤Ï¡¢¥Ñ¥ï¡¼¤ò²¼¤²¤¹¤®¤Æ¤â¾å¤¬¤é¤Ê¤¤¤·¡¢¥Ñ¥ï¡¼¤ò¾å¤²¤¹¤®¤Æ¤â´Ì¤¬ÅÝ¤ì¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¥×¥í¥°¥é¥à¤ÎÊý¤Ç¤âŬÀڤʥѥĴÀ°¤ò¤¹¤ë¤Ù¤­¤À¤È»×¤¤¤Þ¤·¤¿¡£

¥È¥Ã¥×   ÊÔ½¸ º¹Ê¬ ÍúÎò źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS