プログラム全文†
/*------------------------------------------------------------------*/
/*右輪≡A_port、左輪≡B_port、ペン作動モータ≡C_port、距離の単位はmm*/
/*------------------------------------------------------------------*/
#define TURN_TIME 4030 //一回転に要する時間
#define Gap 105 //筆と機体の回転軸の差
#define Diameter 56 //タイヤの径
#define Cir_fere 175.929 //タイヤの周≒175.929...
#define Up_pen Wait(100);RotateMotor(OUT_C,30,-15);Off(OUT_C);Wait(100) //筆を上げる 揺れのため少し停止
#define Down_pen Wait(100);RotateMotor(OUT_C,30,15);Off(OUT_C);Wait(100) //筆を下げる 揺れのため少し停止
float ANGLE_CALC=178/90; //機体を1度旋回させるのに必要なモータの回転角
float Calc_long=2.0463; //回転角度計算用定数( 360(2π) / タイヤの周 )
sub go_f(int l){ //指定距離前進
float Ang=l*Calc_long; //回転角度計算
RotateMotor(OUT_AB,30,Ang);
Off(OUT_AB);
}
sub go_b(int l){ //指定距離後退
float Ang=l*Calc_long*(-1); //回転角度計算(後退のため (-1)掛ける )
RotateMotor(OUT_AB,30,Ang);
Off(OUT_AB);
}
sub turn_R(float angle){ //指定角度右旋回
RotateMotorEx(OUT_AB,30,ANGLE_CALC*angle,100,true,true); //左右で逆回転
}
sub turn_L(float angle){ //指定角度左旋回
RotateMotorEx(OUT_AB,30,-ANGLE_CALC*angle,-100,true,true); //左右で逆回転
}
sub hook(){ //文字のはね
Up_pen;
RotateMotor(OUT_A,30,30); //片輪30°ではねる
Down_pen;
RotateMotor(OUT_A,30,-30);
Up_pen;
}
task main(){
RotateMotor(OUT_C,30,15); //一画目
go_b(120);
hook();
go_f(90+Gap); //次の画に移動
turn_L(90);
go_b(Gap-50);
Down_pen; //二画目
go_b(30);
Up_pen;
turn_L(30); //次の画に移動
go_f(50);
Down_pen; //三画目
go_b(40);
Up_pen;
go_b(10); //次の画に移動
turn_R(30);
go_f(Gap-70);
turn_R(90);
go_b(Gap-30);
Down_pen; //四画目
go_b(65);
hook();
go_f(50); //次の画に移動
turn_R(15);
Down_pen; //五画目
turn_R(20);
Up_pen;
turn_L(50); //次の画に移動
Down_pen; //六画目
turn_L(20);
Up_pen;
turn_R(35); //次の画に移動
go_f(30);
turn_R(90);
go_b(45);
Down_pen; //七画目
RotateMotor(OUT_A,30,-180); //はらい
}