*ベルトコンベア(掴む)側のプログラム &color(red){New!}; [#n8a40f89]
**原型 [#q2e6cb70]
 //作成者:Hypodytes rubripinnis
 //作成日時:2/6〜7、最終更新日:2/12

 #define up OnRev(OUT_B);until(SENSOR_2>=1);Off(OUT_B);  //up(パックを取る)を定義
 #define down(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);    //down(パックを置く)を定義
 
 task main()
 {
     SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1:光センサー
     SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサー2:タッチセンサー 
     SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサー3:光センサー
      
     while (true)
       {
        ClearMessage();          //メッセージをクリア    
        until (Message() != 0);      //0以外の数字が入るまで待つ
 
        if ( Message() == 1 ) up;     //1が入ったらup
        if ( Message() == 2 ) down(290);  //2が入ったらdownを2.9秒
        if ( Message() == 3 ) down(650);  //3が入ったらdownを6.5秒
       }
      
     while(SENSOR_2>=1)
       {
         if((40<=SENSOR_1<=50)&&(SENSOR_2>=1))  //センサー1が40以上50以下かつセンサー2が1以上なら
           {
            SendMessage(1);Wait(300);           //メッセージ1を3秒間送信
           }
         if((50<SENSOR_1)&&(SENSOR_2>=1))       //センサー1が50より大きいかつセンサー2が1以上なら
           {
            SendMessage(2);Wait(300);           //メッセージ2を3秒間送信
           }
         if((SENSOR_1<40)&&(SENSOR_2>=1))       //センサー1が40未満かつセンサー2が1以上なら      
           {
            SendMessage(3);Wait(500);           //メッセージ3を3秒間送信
           }
       }
 
     while(SENSOR_2>=1)
       {
         if((30<=SENSOR_3<=35)&&(SENSOR_2>=1))  //センサー3が30以上35以下かつセンサー2が1以上なら
           {
            SendMessage(4);Wait(300);           //メッセージ4を3秒間送信
           }
         if((35<SENSOR_3)&&(SENSOR_2>=1))       //センサー3が35より大きいかつセンサー2が1以上なら
           {
            SendMessage(5);Wait(300);           //メッセージ5を3秒間送信
           }
         if((SENSOR_3<30)&&(SENSOR_2>=1))       //センサー3が30未満かつセンサー2が1以上なら
           {
            SendMessage(6);Wait(300);           //メッセージ6を3秒間送信
           }
       }
 }

-'''工夫した点'''~

#br
-'''苦労した点'''~

#br
-'''感想'''~

#br


**SASがいぢったVer. [#e49bc5c1]
 //作成者:SAS
 //作成日時:2/7,12、最終更新日:2/12

 #define up OnRev(OUT_B);until(SENSOR_2>=1);Off(OUT_B);    //ベルトコンベアを回転させて紙パックを掴むマクロ
 #define down(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);    //ベルトコンベアを回転させて紙パックを落とすマクロ
 
 task main()
 {
     SetSensor(SENSOR_1,SENSOR_LIGHT);    //
     SetSensor(SENSOR_2,SENSOR_TOUCH);    //
     SetSensor(SENSOR_3,SENSOR_LIGHT);    //
      
     while (true)    //
       {
        ClearMessage();    //Messageを0にする
        until (Message() != 0);    //Messageが0でなくなるまで待つ
 
        if ( Message() == 1 )     //Message(1)を受信したら、
         {up;}    //紙パックを掴む
 
        if((SENSOR_1 >= 40)&&(SENSOR_1 <= 50))    //上段の紙パックの色が緑なら
           {SendMessage(1);Wait(300);}    //Message(1)を300送る
        if(SENSOR_1 >=51)    //上段の紙パックの色が白なら
           {SendMessage(2);Wait(300);}    //Message(2)を300送る
        if(SENSOR_1 <= 39)    //上段の紙パックの色が黒なら
           {SendMessage(3);Wait(300);}    //Message(3)を300送る
 
        Wait(150);    //150待つ
 
        if((30<=SENSOR_3<=35))    //下段の紙パックの色が緑なら
           {SendMessage(4);Wait(300);}    //Message(4)を300送る
        if((35<SENSOR_3))    //下段の紙パックの色が白なら
           {SendMessage(5);Wait(300);}    //Message(5)を300送る
        if((SENSOR_3<30))    //下段の紙パックの色が黒なら
           {SendMessage(6);Wait(300);}    //Message(6)を300送る
            
        until(Message() == 2||3);    //Messageが2か3になるまで待つ
        if ( Message() == 2 )    //Message(2)を受信したら 
        {down(290);}    //紙パックを290かけて置く
        if ( Message() == 3 )    //Message(3)を受信したら  
            {down(650);}    //紙パックを650かけて置く
 
       }
 }


-'''工夫した点'''~
while(true)による無限ループを解消しようとした点
#br
-'''感想'''~
あまりに短時間でいじったため、もう一台のRCXとの連携が上手くいっているかが定かではなく、~
また途中でロボットがフィールドに引っかかってしまったためにそれを確かめることも無く終わってしまったのが残念だった。
#br

 続いて足のプログラム[[GO!:http://yakushi.shinshu-u.ac.jp/robotics/?2005%2FA5%2FMemvberOnly%2F%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%2F%C2%AD%A1%CA%B1%BF%A4%D6%A1%CB%C2%A6%A4%CE%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0]]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS