プログラム全文

/*------------------------------------------------------------------*/
/*右輪≡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);     //はらい
}

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-25 (木) 20:48:04