アクセス数:今日1 総数&counter([total|today|yesterday]);

ベルトコンベア(掴む)側のプログラム New!

原型

//作成者:Hypodytes rubripinnis
//作成日時:2/6〜7

最終更新日:2006-02-14 (火) 05:18:24

#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秒間送信
          }
      }
}
  • 工夫した点
    上段のパックと、下段のパックを識別しなければならなかったので、各段各パックごとにメッセージNo.1〜6をつけてある。パックを吐き出す時間は、下段のパックを出した後でも上段のパックが落ちないように微妙なバランスを保っている。
     
  • 苦労した点
    通信が上手く行かずに苦しんだ。この班は複雑な通信を行うのが初めてだったので、上手くいかず、試行錯誤する間も無かったのでとても大変だった。
     
  • 感想
    なんと言っても時間が厳しかった。通信も上手くいかず、コース上でテストする暇さえ無く本番を迎えてしまったのが残念でしょうがない。本体のデキはなかなかなので、プログラムを作ってやれなかったのが、本体に対して申し訳なく思っている。
     

SASがいぢったVer.

//作成者:SAS
//作成日時:2/7,12

最終更新日:2006-02-14 (火) 05:18:24

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

 続いて足のプログラムGO!


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-14 (火) 05:18:24