* [#r33b7dc4]
* [#s6f5338c]
* [#s38745de]

*プログラミングの説明 [#h1f17bf8]
**定義の解説 [#j0e0c35c]

 #define KURO 44//ライトセンサーの値が44
 #define SHIRO 50//ライトセンサーの値が50
 #define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//まっすぐ進む
 #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);//まっすぐ下がる
 #define senkai_left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC);//左旋回
 #define senkai_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC);//右旋回
 #define turn_left(t) OnFwd(OUT_C);Off(OUT_A);Wait(t);Off(OUT_AC);//左へ曲がる
 #define turn_right(t) OnFwd(OUT_A);Off(OUT_C);Wait(t);Off(OUT_AC);//右へ曲がる
 #define SIGNALPITCHER 111//111のメッセージ
 #define SIGNALBATTER 222//222のメッセージ

**サブルーチンの解説 [#x54d7e17]
ライントレースを行うためのプログラム(T字路を感知すると停止する)
 sub line()
 {
    int n=0;
    while(n==0){
        if((SENSOR_1>SHIRO)&&(SENSOR_3>SHIRO)){//センサー1と3の値が両方とも50より大きい
            OnFwd(OUT_AC);//直進
        }if((SENSOR_1>SHIRO)&&(SENSOR_3<KURO)){//センサー1の値が50より大きくて、センサー3の値が44より小さい
            OnFwd(OUT_A);//左に旋回
            OnRev(OUT_C);//左に旋回
        }if((SENSOR_1<KURO)&&(SENSOR_3>SHIRO)){//センサー1の値が44より小さくて、センサー3の値が50より大きい
            OnFwd(OUT_C);//右に旋回
            OnRev(OUT_A);//右に旋回
        }if((SENSOR_1<KURO)&&(SENSOR_3<KURO)){//センサー1と3の値が両方共44よりも小さい
             Off(OUT_AC);//停止
             Wait(50);//待機
             n++;//関数に足す1
         }
    }
 }
ライトセンサーを使って機体を黒線に対して垂直にするプログラム
 sub suichoku()
 {
    int m=0;
    while(m==0){
        OnFwd(OUT_AC);//直進
        if((SENSOR_1<47)&&(SENSOR_3<42)){//センサー1の値が47より小さくて、せんさー3の値が42より小さい
            Off(OUT_AC);//停止
            Wait(50);//待機
            m++;//関数に足す1
         }
        if(SENSOR_1<45){//センサー1の値が45よりも小さい
            Off(OUT_AC);//停止
            Wait(30);//待機
            turn_left(8);//左へ曲がる
            back(10);//後退
            Wait(50);//待機
         }
        if(SENSOR_3<40){//センサー3の値が40よりも小さい
            Off(OUT_AC);//停止
            Wait(30);//待機
            turn_right(10);//右へ曲がる
            back(10);//後退
            Wait(50);//待機
         }
     }
 }
右側にある6点のゴールを狙うプログラム
 sub shoot6r()
 {
     senkai_right(018);//右に旋回
     go_forward(020);//直進
     OnRev(OUT_B);//ボールを打ち出す
     Wait(15);//待機
     Off(OUT_B);//停止
     OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す
     Wait(15);//待機
     Off(OUT_B);//停止
     back(025);//後退
     senkai_left(023);//左に旋回
     Wait(50);//待機
 }
左側にある6点のゴールを狙うプログラム
 sub shoot6l()
 {
     senkai_left(018);//左に旋回
     go_forward(030);//直進
     OnRev(OUT_B);//ボールを打ち出す
     Wait(15);//待機
     Off(OUT_B);//停止
     OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す
     Wait(15);//待機
     Off(OUT_B);//停止
     back(045);//後退
     senkai_right(026);//右に旋回
     Wait(50);//待機
     
 }
右側にある4点のゴールを狙うプログラム
 sub shoot4r()
 {
     senkai_right(035);//右に旋回
     go_forward(020);//直進
     OnRev(OUT_B);//ボールを打ち出す
     Wait(15);//待機
     Off(OUT_B);//停止
     OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す
     Wait(15);//待機
     Off(OUT_B);//停止
     back(025);//後退
     senkai_left(035);//左に旋回
     Wait(50);//待機
 }
10点のゴールを狙うプログラム
 sub shoot10()
 {
     senkai_left(006);//左に旋回
     go_forward(050);//直進
     OnRev(OUT_B);//ボールを打ち出す
     Wait(15);//待機
     Off(OUT_B);//停止
     OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す
     Wait(15);//待機
     Off(OUT_B);//停止
     back(055);//後退
     senkai_right(008);//右に旋回
     Wait(50);//待機
 }
**タスクメインの解説 [#r5fb7345]
 task main()
 {
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    senkai_left(35);//左に旋回
    Wait(30);//待機
    go_forward(200);//直進
    Wait(30);//待機
    senkai_left(34);//左に旋回
    Wait(30);//待機
    go_forward(210);//直進
    Wait(30);//待機
    line();//ライントレイス
    go_forward(50);//直進
    senkai_left(85);//左に旋回
    back(80);//後退
    suichoku();//機体を黒線に対して垂直にする
    go_forward(99);//直進
    senkai_left(105);//左に旋回
    go_forward(125);//直進
    ClearMessage(); //メッセージを0にする
    Off(OUT_AC);//停止
    until(Message() == SIGNALPITCHER);//メッセージが111になるまで
    SendMessage(SIGNALBATTER);//222を送る
    PlaySound(SOUND_CLICK);//音を鳴らす
    back(165);//後退
    Wait(200);//待機
    shoot4r();//右の4を狙う
    Wait(100);//待機
    shoot6l();//左の6を狙う
    Wait(185);//待機
    shoot6r();//右の6を狙う
    Wait(130);//待機
    shoot6l();//左の6を狙う
    Wait(160);//待機
    shoot10();//10を狙う
    
 }
* [#vc55c6f9]
* [#bfc72408]
[[2016b/Member]]

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