Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CruizCore_R1370P EC delta enc_1multi mbed
Fork of F3RCrere by
Revision 7:3a7e49ed1162, committed 2018-09-15
- Comitter:
- aoikoizumi
- Date:
- Sat Sep 15 07:54:13 2018 +0000
- Parent:
- 6:7ec6c3d3a30a
- Commit message:
- 9/15 ???????
; ???????
; ????
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Sep 13 04:17:15 2018 +0000
+++ b/main.cpp Sat Sep 15 07:54:13 2018 +0000
@@ -4,10 +4,11 @@
#include "EC.h"
#include "R1370P.h"
#include "enc_1multi.h"
-#define BASIC_SPEED 15 //モーターはこの角速度で駆動させる
+#define BASIC_SPEED 24 //モーターはこの角速度で駆動させる
SpeedControl motorR(PB_13,PA_10,NC,500,0.05,PB_10,PB_1); //right enc migi ue
SpeedControl motorL(PB_5,PB_3,NC,500,0.05,PA_5,PA_7); //left enc hidari sita //ok
+
Ec EC1(PB_4,PA_8,NC,300,0.05); //center enc
Ticker motor_tick; //角速度計算用ticker
Ticker ticker;//for enc
@@ -23,11 +24,11 @@
EC1.CalOmega();
}
-//DigitalIn button(USER_BUTTON);
+DigitalIn button(USER_BUTTON,PullUp);
DigitalIn reset_f(PC_1,PullUp);
DigitalIn reset_a(PA_4,PullUp);
-PwmOut servo(PB_14);//servo
+PwmOut servo(PB_7);//servo
PwmOut motor_f(PC_9);
PwmOut motor_b(PB_9);//arm
DigitalOut denjiben(PC_0);//dennjibenn
@@ -38,14 +39,14 @@
double d_dist=0;
double x;
double y;
-double asari_x=900;
-double asari_y=2500;//asariwo toru tekisetsuna zahyouwo kaeraremasu
-double goal_x=1120;
-double goal_y=1700;
+double asari_x=810;
+double asari_y=2674;//asariwo toru tekisetsuna zahyouwo kaeraremasu
+double goal_x=1020;
+double goal_y=1562;
double start_x=185;
-double start_y=150;
+double start_y=300;
Timer t;
-int i=1;
+int i=0;
int kai=0;//printf kansuu
double target_R=0,target_L=0;
@@ -65,40 +66,40 @@
void susumu_y(double ay,double by,double goaly)//y zahyou wo motiita susumikata subete
{
//pc.printf("ay=%f by=%f y=%f goaly=%f\r\n",ay,by,y,goaly);
- if(y<goaly-50&&ay>=0) {
+ if(y<goaly-100&&ay>=0) {
t.start();
- pc.printf("R=%f L=%f\r\n",target_R,target_L);
- if(t.read_ms()<100) {
+ //pc.printf("R=%f L=%f\r\n",target_R,target_L);
+ if(t.read_ms()<150) {
pc.printf("t=%f",t.read());
tgt(ay/3,by/3);
- } else if(t.read_ms()>=100&&t.read_ms()<200) {
+ } else if(t.read_ms()>=150&&t.read_ms()<300) {
pc.printf("t=%f",t.read());
tgt(ay*2/3,by*2/3);
} else {
tgt(ay,by);
t.stop();
- pc.printf("R=%f L=%f",target_R,target_L);
+ //pc.printf("R=%f L=%f",target_R,target_L);
}
- } else if(y<goaly&&y>=goaly-50&&ay>=0) {
- tgt(ay/3,by/3);
+ } else if(y<goaly&&y>=goaly-100&&ay>=0) {
+ tgt(ay/2,by/2);
- } else if(y>goaly+50&&ay<0) {
+ } else if(y>goaly+100&&ay<0) {
t.start();
- pc.printf("R=%f L=%f\r\n",target_R,target_L);
- if(t.read_ms()<100) {
+ //pc.printf("R=%f L=%f\r\n",target_R,target_L);
+ if(t.read_ms()<150) {
pc.printf("t=%f",t.read());
tgt(ay/3,by/3);
- } else if(t.read_ms()>=100&&t.read_ms()<200) {
+ } else if(t.read_ms()>=150&&t.read_ms()<300) {
pc.printf("t=%f",t.read());
tgt(ay*2/3,by*2/3);
} else {
tgt(ay,by);
t.stop();
- pc.printf("R=%f L=%f",target_R,target_L);
+ //pc.printf("R=%f L=%f",target_R,target_L);
}
- } else if(y>goaly&&y<=goaly+50&&ay<0) {
- tgt(ay/3,by/3);
+ } else if(y>goaly&&y<=goaly+100&&ay<0) {
+ tgt(ay/2,by/2);
} else {
i++;
t.reset();
@@ -111,22 +112,22 @@
void susumu_xl(double axl,double bxl,double goalxl)//hidarikara mokuhyoutenn ni toutatsu surutameno dousa
{
- if(x<goalxl-50) {
+ if(x<goalxl-100) {
t.start();
- pc.printf("R=%f L=%f\r\n",target_R,target_L);
- if(t.read_ms()<100) {
+ //pc.printf("R=%f L=%f\r\n",target_R,target_L);
+ if(t.read_ms()<150) {
pc.printf("t=%f",t.read());
tgt(axl/3,bxl/3);
- } else if(t.read_ms()>=100&&t.read_ms()<200) {
+ } else if(t.read_ms()>=150&&t.read_ms()<300) {
pc.printf("t=%f",t.read());
tgt(axl*2/3,bxl*2/3);
} else {
tgt(axl,bxl);
t.stop();
- pc.printf("R=%f L=%f",target_R,target_L);
+ ////pc.printf("R=%f L=%f",target_R,target_L);
}
- } else if(x<goalxl&&x>=goalxl-50) {
- tgt(axl/3,bxl/3);
+ } else if(x<goalxl&&x>=goalxl-100) {
+ tgt(axl/2,bxl/2);
} else {
t.reset();
@@ -138,22 +139,22 @@
void susumu_xr(double axr,double bxr,double goalxr)//migikara mokuhyoutenn ni toutatsu surutameno dousa
{
- if(x>goalxr+50) {
+ if(x>goalxr+100) {
t.start();
- pc.printf("R=%f L=%f\r\n",target_R,target_L);
- if(t.read_ms()<100) {
+ //pc.printf("R=%f L=%f\r\n",target_R,target_L);
+ if(t.read_ms()<150) {
pc.printf("t=%f",t.read());
tgt(axr/3,bxr/3);
- } else if(t.read_ms()>=100&&t.read_ms()<200) {
+ } else if(t.read_ms()>=150&&t.read_ms()<300) {
pc.printf("t=%f",t.read());
tgt(axr*2/3,bxr*2/3);
} else {
tgt(axr,bxr);
t.stop();
- pc.printf("R=%f L=%f",target_R,target_L);
+ ////pc.printf("R=%f L=%f",target_R,target_L);
}
- } else if(x>goalxr&&x<=goalxr+50) {
- tgt(axr/3,bxr/3);
+ } else if(x>goalxr&&x<=goalxr+100) {
+ tgt(axr/2,bxr/2);
} else {
t.reset();
@@ -164,9 +165,9 @@
void susumu_ang(double a,double b,double goal)//kakudo
{
- if(goal-5>angle&&a<b) {//usetsu
+ if(goal-30>angle&&a<b) {//usetsu
t.start();
- pc.printf("R=%f L=%f\r\n",target_R,target_L);
+ //pc.printf("R=%f L=%f\r\n",target_R,target_L);
if(t.read_ms()<100) {
pc.printf("t=%f",t.read());
tgt(a/3,b/3);
@@ -176,14 +177,14 @@
} else {
tgt(a,b);
t.stop();
- pc.printf("R=%f L=%f",target_R,target_L);
+ ////pc.printf("R=%f L=%f",target_R,target_L);
}
- } else if(angle<goal&&angle>=goal-5&&a<b) {
- tgt(a/3,b/3);
+ } else if(angle<goal&&angle>=goal-30&&a<b) {
+ tgt(a/2,b/2);
- } else if(angle>goal+5&&a>b) { //sasetsu
+ } else if(angle>goal+30&&a>b) { //sasetsu
t.start();
- pc.printf("R=%f L=%f\r\n",target_R,target_L);
+ ////pc.printf("R=%f L=%f\r\n",target_R,target_L);
if(t.read_ms()<100) {
pc.printf("t=%f",t.read());
tgt(a/3,b/3);
@@ -193,10 +194,10 @@
} else {
tgt(a,b);
t.stop();
- pc.printf("R=%f L=%f",target_R,target_L);
+ ////pc.printf("R=%f L=%f",target_R,target_L);
}
- } else if(angle>goal&&angle<=goal+5&&a>b) {
- tgt(a/3,b/3);
+ } else if(angle>goal&&angle<=goal+30&&a>b) {
+ tgt(a/2,b/2);
} else {
i++;
@@ -211,7 +212,7 @@
int main(void)
{
-
+
gyro.initialize(); //main関数の最初に一度だけ実行
gyro.acc_offset(); //やってもやらなくてもいい
@@ -220,52 +221,52 @@
motorR.setDOconstant(34.1);
motorL.setDOconstant(30);//c
motorR.setPDparam(0,0);
- motorR.setPDparam(0,0);//pd//akirameta
+ motorL.setPDparam(0,0);//pd//akirameta
- EC1.setDiameter_mm(50);//sokuteirinnhannkei
+ EC1.setDiameter_mm(48);//sokuteirinnhannkei
double getDistance_mm();
//int EC1.getCount()=0;
void reset ();
EC1.reset();
- servo.period_ms(20);
+ //servo.period_ms(30);
motor_f.period_ms(30);
motor_b.period_ms(30);//arm
x=start_x;
y=start_y;//start point//keisann wo sinaosu hitsuyouga arimasu
-
+ //servo.pulsewidth_us(950);
while(1) {
+ //target_R=(-1)*BASIC_SPEED;
+ //target_L=(-1)*BASIC_SPEED;
// motorR.turnF(0.3);
//motorL.turnF(0.3);//for debug
- motorR.Sc(target_R);
- motorL.Sc(target_L);//target_R,target_Lの値を変えることで直進・後退・右回転・左回転を行う
+ //motorR.Sc(target_R);
+ //motorL.Sc(target_L);//target_R,target_Lの値を変えることで直進・後退・右回転・左回転を行う
angle=gyro.getAngle()*(-1); //角度の値を受け取る
EC1.getDistance_mm();
// EC1.CalOmega();
-
if(target_R==0) motorR.stop();
else motorR.Sc(target_R);
if(target_L==0) motorL.stop();
else motorL.Sc(target_L);
-
new_dist=EC1.getDistance_mm();
- d_dist=new_dist-old_dist;
- old_dist=new_dist;
+ d_dist=new_dist-old_dist;
+ old_dist=new_dist;
- double d_x=d_dist*sin(angle);
- double d_y=d_dist*cos(angle);
+ double d_x=d_dist*sin(angle*3.1415926535/180);
+ double d_y=d_dist*cos(angle*3.1415926535/180);
x=x+d_x;
y=y+d_y;
if(kai>=3) {
-
+
//double d_x=d_dist*sin(angle);;
//double d_y=d_dist*cos(angle);;
@@ -273,7 +274,7 @@
//y=y+d_y;
pc.printf("R=%f L=%f",target_R,target_L);
- // pc.printf("omg_R=%f omg_L=%f \r\n",motorR.getOmega(),motorL.getOmega());
+ pc.printf("omg_R=%f omg_L=%f \r\n",motorR.getOmega(),motorL.getOmega());
pc.printf("i=%d\r\n",i);
//pc.printf("EC1=%f",EC1.getDistance_mm(),EC1.getCount());
pc.printf("x=%f y=%f",x,y);
@@ -283,164 +284,182 @@
}
kai++;
if(i==0) {
- /*if(reset_f.read()==1) {
+ if(reset_f.read()==0&&button.read()==0) {
+ wait(0.05);
+ if(reset_f.read()==0&&button.read()==0) {
+ denjiben=1;
+ i++;
+ }
+ }
+ if(reset_a.read()==0&&button.read()==0) {
wait(0.05);
- if(reset_f.read()==1) {
- */ denjiben=0;
- i++;
- // }
- //}
- if(reset_a.read()==1) {
- wait(0.05);
- if(reset_a.read()==1) {
- denjiben=0;
- x=70;
- y=2500;
- i=14;
+ if(reset_a.read()==0&&button.read()==0) {
+ denjiben=1;
+
+ x=180;
+ y=2674;
+
+ i=6;
+ }
+ }//x,y
+ }
+ if(i==1) {
+ susumu_y(1,1,857);//x,x+178
+ }
+ if(i==2) {
+ susumu_ang(0,0.7,90);//x+155,x+471.5
+ }
+ if(i==3) {
+ susumu_xl(0.7,0.7,745);//728.5,1078.5
+ }
+ if(i==4) {
+ susumu_ang(0.7,0,0);//850,1372
+ }
+ if(i==5) {
+ susumu_y(0.7,0.7,2016);//850,1700
+ }
+ if(i==6) {
+ // motorR.stop();
+ //motorL.stop();
+ tgt(0,0);
+ wait(2);
+ t.start();
+ if(t<1) {
+ motor_f=0.82;
+ motor_b=0;
+
+ printf("motor");
+ } else {
+ motor_f=0;
+ motor_b=0;
+ printf("finish");
+ t.stop();
+ t.reset();
+ i++;
}
- }//x,y
- }
- if(i==1) {
- susumu_y(1,1,start_x+178);//x,x+178
- }
- if(i==2) {
- susumu_ang(0.5,1,45);//x+121.5,x+471.5
- }
- if(i==3) {
- susumu_xl(1,1,728.5);//728.5,1078.5
- }
- if(i==4) {
- susumu_ang(1,0.5,0);//850,1372
- }
- if(i==5) {
- susumu_y(1,1,1700);//850,1700
- }
- if(i==6) {
- motorR.stop();
- motorL.stop();
- t.start();
- if(t<1) {
- motor_f=0.82;
- motor_b=0;
- } else {
- motor_f=0;
- motor_b=0;
- printf("finish");
- t.reset();
+ }//gatiasari
+
+
+ if(i==7) {
+ wait(2);
+ t.start();
+ if(t<1) {
+ motor_f=0;
+ motor_b=0.82;
+
+ printf("motor");
+ } else {
+ motor_f=0;
+ motor_b=0;
+ printf("finish");
+ t.stop();
+ t.reset();
+ i++;
+ }
+ if(angle>=-89) {
+ target_R=BASIC_SPEED/2;
+ target_L=BASIC_SPEED/(-2);
+ }
+ if(angle<=-91) {
+ target_R=BASIC_SPEED/(-2);
+ target_L=BASIC_SPEED/2;
+ }
+ if(angle>-91&angle<-89) {
+ motorR.stop();
+ motorL.stop();
+ wait(2);
+ if(angle>-91&angle<-89) {
+ i++;
+ }
+ }
+ }//kakudo tyousei
+ if(i==8) {
+ susumu_xr(1,1,555);//700,1700
+ }
+ if(i==9) {
+ susumu_ang(0,0.7,0);//390,2010
+ }
+ if(i==10) {
+ susumu_y(0.8,0.8,asari_y-155);//390,y-310
+ }
+ if(i==11) {
+ susumu_ang(0,1,90);//700,y
+ }
+ if(i==12) {
+ motorR.stop();
+ motorL.stop();
+ //servo.pulsewidth_us(2100);
+ wait(1.5);
+ //servo.pulsewidth_us(2400);
+ wait(2);
i++;
}
- }//gatiasari
-
-
- if(i==7) {
- t.start();
- if(t<1) {
- motor_f=0;
- motor_b=0.82;
- } else {
- motor_f=0;
- motor_b=0;
- printf("finish");
- t.reset();
+ if(i==13) {
+ if(angle>=91) {
+ target_R=BASIC_SPEED/2;
+ target_L=BASIC_SPEED/(-2);
+ }
+ if(angle<=89) {
+ target_R=BASIC_SPEED/(-2);
+ target_L=BASIC_SPEED/2;
+ }
+ if(angle>89&angle<91) {
+ motorR.stop();
+ motorL.stop();
+ wait(2);
+ if(angle>89&angle<91) {
+ i++;
+ }
+ }
+ }
+ if(i==14) {
+ susumu_xl(0.6,0.6,asari_x);//x,y
}
- if(angle>=-89) {
- target_R=BASIC_SPEED/5;
- target_L=BASIC_SPEED/(-5);
+ if(i==15) {
+ motorR.stop();
+ motorL.stop();
+ tgt(0,0);
+ wait(2);
+ wait(0.5);
+ denjiben=0;
+ wait(0.5);
+ //servo.pulsewidth_us(900);
+ wait(2);
+ i++;
}
- if(angle<=-91) {
- target_R=BASIC_SPEED/(-5);
- target_L=BASIC_SPEED/-5;
+ if(i==16) {
+ susumu_xr(-1,-1,555);//700,y
+ }
+ if(i==17) {
+ susumu_ang(0,-0.6,0);//390,y-310
}
- if(angle>-91&angle<-89) {
+ if(i==18) {
+ susumu_y(-1,-1,goal_y+155);//390,y+310
+ }
+ if(i==19) {
+ susumu_ang(0,-0.6,-90);//700,y
+ }
+ if(i==20) {
+ susumu_xl(-1,-1,goal_x);//x,y
+ }
+ if(i==21) {
motorR.stop();
motorL.stop();
wait(0.5);
- if(angle>-91&angle<-89) {
- i++;
- }
- }
- }//kakudo tyousei
- if(i==8) {
- susumu_xr(1,1,700);//700,1700
- }
- if(i==9) {
- susumu_ang(1/3,1,0);//390,2010
- }
- if(i==10) {
- susumu_y(1,1,asari_y-310);//390,y-310
- }
- if(i==11) {
- susumu_ang(1/3,1,90);//700,y
- }
- if(i==12) {
- motorR.stop();
- motorL.stop();
- servo.pulsewidth_us(2100);
- wait(1.5);
- servo.pulsewidth_us(2400);
- wait(1);
- i++;
- }
- if(i==13) {
- if(angle>=91) {
- target_R=BASIC_SPEED/5;
- target_L=BASIC_SPEED/(-5);
- }
- if(angle<=89) {
- target_R=BASIC_SPEED/(-5);
- target_L=BASIC_SPEED/5;
+ denjiben=1;
+ wait(0.5);
+
+ break;
}
- if(angle>89&angle<91) {
- motorR.stop();
- motorL.stop();
- wait(0.1);
- if(angle>89&angle<91) {
- i++;
- }
+ if(i==30) {
+ tgt(-1,-1);
}
- }
- if(i==14) {
- susumu_xl(1,1,asari_x);//x,y
- }
- if(i==15) {
- motorR.stop();
- motorL.stop();
- wait(0.5);
- denjiben=1;
- wait(0.5);
- servo.pulsewidth_us(900);
- wait(2);
- i++;
- }
- if(i==16) {
- susumu_xr(-1,-1,700);//700,y
- }
- if(i==17) {
- susumu_ang(-1/3,-1,0);//390,y-310
- }
- if(i==18) {
- susumu_y(-1,-1,goal_y+310);//390,y+310
- }
- if(i==19) {
- susumu_ang(-1/3,-1,-90);//700,y
- }
- if(i==20) {
- susumu_xl(-1,-1,goal_x);//x,y
- }
- if(i==21) {
- motorR.stop();
- motorL.stop();
- wait(0.5);
- denjiben=0;
- wait(0.5);
-
- break;
- }
-}//while
-tgt(0,0);
-return 0;
+ }//while
+ tgt(0,0);
+ return 0;
}//intmain
+
