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.
Diff: LF2.h
- Revision:
- 3:04f6fe153dbc
- Parent:
- 1:f9c953ddc87a
- Child:
- 4:795055e031c3
diff -r 864b823b1735 -r 04f6fe153dbc LF2.h
--- a/LF2.h Sun Feb 28 15:43:11 2016 +0000
+++ b/LF2.h Mon Feb 29 15:10:24 2016 +0000
@@ -2,10 +2,10 @@
/*設定するもの*/
#define MAX 3000 //白よりも少し大きい値
-#define MIN 1100 //暗い色よりも少し小さい値
-#define naka 1450 //サーボの真ん中
-float kp=0.2; //P係数
-float kdir=0; //傾きにかける係数 Dのような役割をする
+#define MIN 1500 //暗い色よりも少し小さい値
+#define naka 1525 //サーボの真ん中
+float kp=0.05;//0.2; //P係数
+float kdir=0.025; //傾きにかける係数 Dのような役割をする
SPI mcp(p5, p6, p7); // mosi, miso, sclk
DigitalOut mcs(p8);
@@ -34,10 +34,11 @@
int zure1,zure2,zure3,zure4,zure5;
-float sa; //CdSの両隣の値の差
+float sa;
int now;
int bef;
int dir;
+int Dir;
int out;
int i;
int mcp_i;
@@ -93,8 +94,13 @@
led3=1;
led4=1;
- while(1){if(switch_1==1||switch_2==1||switch_3==1)break;} //白に移動させた後スイッチを入れる
- // wait(3);
+ wait(3);
+
+ led1=1;
+ led2=0;
+ led3=0;
+ led4=1;
+
while(1){ //白色で合わせる
PIN();
@@ -140,14 +146,14 @@
e10=c10+d10;
e11=c11+d11;
e12=c12+d12;
+
+ MAX_MIN=MAX-MIN;
+ while(1){if(switch_1==1||switch_2==1||switch_3==1)break;} //白に移動させた後スイッチを入れる
led1=0;
led2=0;
led3=0;
led4=0;
-
- MAX_MIN=MAX-MIN;
-
}
void SA(void){
@@ -253,105 +259,108 @@
hosei();
if(i==0){
Find_White();
- dir+=now; //加算式にする。
- if(dir>1000)dir=1000;
- else if(dir<-1000)dir=-1000;
- // if(dir>3)i=0; //外乱対策
}
if(i==1){
+ dir+=bef; //加算式にする。
+ if(dir>1000)dir=1000;
+ else if(dir<-1000)dir=-1000;
+ Dir=dir*kdir;
+ if(Dir>50)Dir=50;
+ else if(Dir<-50)Dir=-50;
+
switch(now){
- case -6:
+ case -6:
sa=zure5+(s1-s2)*kp;
SA();
- out=naka-dir*kdir-sa;
+ out=naka-Dir-sa;
bef=now; i=0;
break;
case -5:
if(s1>s3)sa=zure5+(s1-s2)*kp;
- else sa=zure4+(s2-s3)*kp;
+ else {sa=zure4+(s2-s3)*kp; if(sa>zure5)sa=zure5;}
SA();
- out=naka-dir*kdir-sa;
+ out=naka-Dir-sa;
bef=now; i=0;
break;
case -4:
- if(s2>s4)sa=zure4+(s2-s3)*kp;
- else sa=zure3+(s3-s4)*kp;
+ if(s2>s4){sa=zure4+(s2-s3)*kp; if(sa>zure5)sa=zure5;}
+ else {sa=zure3+(s3-s4)*kp; if(sa>zure4)sa=zure4;}
SA();
- out=naka-dir*kdir-sa;
+ out=naka-Dir-sa;
bef=now; i=0;
break;
case -3:
- if(s3>s5)sa=zure3+(s3-s4)*kp;
- else sa=zure2+(s4-s5)*kp;
+ if(s3>s5){sa=zure3+(s3-s4)*kp; if(sa>zure4)sa=zure4;}
+ else {sa=zure2+(s4-s5)*kp; if(sa>zure3)sa=zure3;}
SA();
- out=naka-dir*kdir-sa;
+ out=naka-Dir-sa;
bef=now; i=0;
break;
case -2:
- if(s4>s6)sa=zure2+(s4-s5)*kp;
- else sa=zure1+(s5-s6)*kp;
+ if(s4>s6){sa=zure2+(s4-s5)*kp; if(sa>zure3)sa=zure3;}
+ else {sa=zure1+(s5-s6)*kp; if(sa>zure2)sa=zure2;}
SA();
- out=naka-dir*kdir-sa;
+ out=naka-Dir-sa;
bef=now; i=0;
break;
case -1:
- if(s5>s7)sa=zure1+(s5-s6)*kp;
- else sa=(s6-s7)*kp;
+ if(s5>s7){sa=zure1+(s5-s6)*kp; if(sa>zure2)sa=zure2;}
+ else {sa=(s6-s7)*kp; if(sa>zure1)sa=zure1;}
SA();
- out=naka-dir*kdir-sa;
+ out=naka-Dir-sa;
bef=now; i=0;
break;
case 1:
- if(s6>s8)sa=(s7-s6)*kp;
- else sa=zure1+(s8-s7)*kp;
+ if(s6>s8){sa=(s7-s6)*kp; if(sa>zure1)sa=zure1;}
+ else {sa=zure1+(s8-s7)*kp; if(sa>zure2)sa=zure2;}
SA();
- out=naka+dir*kdir+sa;
+ out=naka+Dir+sa;
bef=now; i=0;
break;
case 2:
- if(s7>s9)sa=zure1+(s8-s7)*kp;
- else sa=zure2+(s9-s8)*kp;
+ if(s7>s9){sa=zure1+(s8-s7)*kp; if(sa>zure2)sa=zure2;}
+ else {sa=zure2+(s9-s8)*kp; if(sa>zure3)sa=zure3;}
SA();
- out=naka+dir*kdir+sa;
+ out=naka+Dir+sa;
bef=now; i=0;
break;
case 3:
- if(s8>s10)sa=zure2+(s9-s8)*kp;
- else sa=zure3+(s10-s9)*kp;
+ if(s8>s10){sa=zure2+(s9-s8)*kp; if(sa>zure3)sa=zure3;}
+ else {sa=zure3+(s10-s9)*kp; if(sa>zure4)sa=zure4;}
SA();
- out=naka+dir*kdir+sa;
+ out=naka+Dir+sa;
bef=now; i=0;
break;
case 4:
- if(s9>s11)sa=zure3+(s10-s9)*kp;
- else sa=zure4+(s11-s10)*kp;
+ if(s9>s11){sa=zure3+(s10-s9)*kp; if(sa>zure4)sa=zure4;}
+ else {sa=zure4+(s11-s10)*kp; if(sa>zure5)sa=zure5;}
SA();
- out=naka+dir*kdir+sa;
+ out=naka+Dir+sa;
bef=now; i=0;
break;
case 5:
- if(s10>s12)sa=zure4+(s11-s10)*kp;
+ if(s10>s12){sa=zure4+(s11-s10)*kp; if(sa>zure5)sa=zure5;}
else sa=zure5+(s12-s11)*kp;
SA();
- out=naka+dir*kdir+sa;
+ out=naka+Dir+sa;
bef=now; i=0;
break;
case 6:
sa=zure5+(s12-s11)*kp;
SA();
- out=naka+dir*kdir+sa;
+ out=naka+Dir+sa;
bef=now; i=0;
break;