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.
Fork of MainBoard2018_Auto_Master_A_neww by
Diff: System/Process/Process.cpp
- Revision:
- 8:6fb3723f7747
- Parent:
- 7:e88c5d47a3be
- Child:
- 9:f93fc79a49ea
--- a/System/Process/Process.cpp Mon Oct 01 14:45:50 2018 +0000
+++ b/System/Process/Process.cpp Tue Oct 02 12:18:05 2018 +0000
@@ -67,11 +67,11 @@
#define Angle_R 0 //角度調節右
#define Angle_L 1 //角度調節左
+
#define Lim_AR 3 //角度調節右
#define Lim_AL 4 //角度調節左
#define Lim_R 0 //センター右
#define Lim_L 1 //センター左
-
//************メカナム********************
const int mecanum[15][15]=
@@ -126,19 +126,39 @@
int startP = 35;
int downP = 5;
+
+int Asasult = 0;
+int Bsasult = 0;
+int Csasult = 0;
+int Dsasult = 0;
+
+void pointcalculation();
+
+Ticker Color_T;
//************ライントレース変数*******************
//ROタコン
- QEI wheel(RT11_PIN, RT12_PIN, NC, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING);
+QEI RtX(RT11_PIN, RT12_PIN, NC, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING);
+QEI RtY(RT21_PIN, RT22_PIN, NC, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING);
+Ticker get_rpm;
+PID Rt_X = PID(0.03, -255, 255, 0.1, 0, 0);
+PID Rt_Y = PID(0.03, -255, 255, 0.1, 0, 0);
+bool Rt_flagX = false;
+bool Rt_flagY = false;
+int rpmX;
+int rpmY;
+int disX;
+int disY;
+int palseX;
+int palseY;
+int RtpwmX;
+int RtpwmY;
+double goalX = 1200.000;
+double goalY = 900.000;
+
+void filip();
+//PID startup = PID(0.03, -255, 255, 0.3, 0, 0);
- Ticker get_rpm;
- int rpm;
- int palse;
- double goalpoint = 3000.0000;
-
- PID startup = PID(0.03, -255, 255, 0.3, 0, 0);
-
-
-
+//ROタコン
//************ジャイロ*******************
float Angle;
@@ -275,28 +295,62 @@
SystemProcessInitialize();
while(1)
- {
- /*wait(0.1);
- //wheel.getPulses()...どちらの方向にどれだけ回ったか
- pc.printf("Pulses:%07d \r\n",wheel.getPulses());
- //軸が何回転したか
- pc.printf("Rotate:%04.3f \r\n",(double)wheel.getPulses()/(ROTATE_PER_REVOLUTIONS*2));
- */
-
- /* float x = 0, y= 0, z = 0;
-
- x = acc[0]*1000;
- y = acc[1]*1000;
- z = acc[2]*1000;
-
- pc.printf("X:%3.1f , Y:%3.1f , Z:%3.1f \r\n",x,y,z);
-
- float rotateX = (x - 306)/2.22 - 90;
- float rotateY = (y - 305)/2.21 - 90;
- float rotateZ = (z - 300)/1.18 - 90;
- pc.printf("X:%3.1f , Y:%3.1f , Z:%3.1f \r\n" , rotateX , rotateY , rotateZ);
- wait_ms(50);
- */
+ {
+ get_rpm.attach_us(&filip,1000);
+
+ disX = 48*3.141592*rpmX;
+ disY = 48*3.141592*rpmY;
+
+ RtpwmX = Rt_X.SetPV(disX , goalX);
+ RtpwmY = Rt_Y.SetPV(disY , goalY);
+
+ //if(controller->Button.B){
+ Rt_flagX = true;
+ //}
+ /*Rt_flagY = true;
+ if (Rt_flagY){
+ motor[TIRE_FR].dir = SetStatus(RtpwmY);
+ motor[TIRE_FL].dir = SetStatus(RtpwmY);
+ motor[TIRE_BR].dir = SetStatus(-RtpwmY);
+ motor[TIRE_BL].dir = SetStatus(-RtpwmY);
+ motor[TIRE_FR].pwm = SetPWM(RtpwmY);
+ motor[TIRE_FL].pwm = SetPWM(RtpwmY);
+ motor[TIRE_BR].pwm = SetPWM(RtpwmY);
+ motor[TIRE_BL].pwm = SetPWM(RtpwmY);
+ }
+ if(goalY - 5 < disY && disY < goalY + 5){
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ Rt_flagY = false;
+ Rt_flagX = true;
+ }*/
+ if(Rt_flagX){
+ motor[TIRE_FR].dir = SetStatus(RtpwmX);
+ motor[TIRE_FL].dir = SetStatus(-RtpwmX);
+ motor[TIRE_BR].dir = SetStatus(RtpwmX);
+ motor[TIRE_BL].dir = SetStatus(-RtpwmX);
+ motor[TIRE_FR].pwm = SetPWM(RtpwmX);
+ motor[TIRE_FL].pwm = SetPWM(RtpwmX);
+ motor[TIRE_BR].pwm = SetPWM(RtpwmX);
+ motor[TIRE_BL].pwm = SetPWM(RtpwmX);
+ }
+ if(goalX - 5 < disX && disX < goalX + 5){
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ Rt_flagX = false;
+ }else{
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ }
+ pc.printf("%d \r\n",RtpwmX);
+ wait_ms(50);
+
/*if(LimitSw::IsPressed(9)) LED_DEBUG0 = LED_ON;
else LED_DEBUG0 = LED_OFF;*/
@@ -398,9 +452,9 @@
//wheel.getPulses()...どちらの方向にどれだけ回ったか
- pc.printf("Pulses:%07d \r\n",wheel.getPulses());
+ //pc.printf("Pulses:%07d \r\n",wheel.getPulses());
//軸が何回転したか
- pc.printf("Rotate:%04.3f \r\n",(double)wheel.getPulses()/(ROTATE_PER_REVOLUTIONS*2));
+ //pc.printf("Rotate:%04.3f \r\n",(double)wheel.getPulses()/(ROTATE_PER_REVOLUTIONS*2));
}
#endif
@@ -438,7 +492,7 @@
compB = true;//on true,noon false
}
else if(!(Color_B[0] > Point[0] && Color_B[1] > Point[1] && Color_B[2] > Point[2]))compB = false;//茶
-
+ /*
if(Color_C[0] > Point[0] && Color_C[1] > Point[1] && Color_C[2] > Point[2] && !compC)//白
{
invationC ^= 1;//start false,over true
@@ -452,7 +506,7 @@
compD = true;//on true,noon false
}
else if(!(Color_D[0] > Point[0] && Color_D[1] > Point[1] && Color_D[2] > Point[2]))compD = false;//茶
-
+ */
//
@@ -653,15 +707,9 @@
if(LimitSw::IsPressed(Lim_AR) && motor[Angle_R].dir == FOR && motor[Angle_L].dir == BACK){
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
-
- motor[Angle_R].pwm = 255;
- motor[Angle_L].pwm = 255;
}else if(LimitSw::IsPressed(Lim_AL) && motor[Angle_R].dir == BACK && motor[Angle_L].dir == FOR){
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
-
- motor[Angle_R].pwm = 255;
- motor[Angle_L].pwm = 255;
}
}
#endif
@@ -750,14 +798,250 @@
#if USE_PROCESS_NUM>5
static void Process5()
{
+ /*wait(0.1);
+ //RtX.getPulses();...どちらの方向にどれだけ回ったか
+ //RtY.getPulses();
+ pc.printf("Pulses:%07d \r\n",RtX.getPulses());
+ pc.printf("Pulses:%07d \r\n",RtY.getPulses());
+ //軸が何回転したか
+ pc.printf("Rotate:%04.3f \r\n",(double)RtX.getPulses()/(ROTATE_PER_REVOLUTIONS*2));
+ */
+ /*
+ get_rpm.attach_us(&filip,1000);
+ disX = 48*3.141592*rpmX;
+ disY = 48*3.141592*rpmY;
+
+ RtpwmX = Rt_X.SetPV(disX , goalX);
+ RtpwmY = Rt_Y.SetPV(disY , goalY);
+
+ if(controller->Button.B){
+ Rt_flagY = true;
+ }
+ if (Rt_flagY){
+ motor[TIRE_FR].dir = SetStatus(RtpwmY);
+ motor[TIRE_FL].dir = SetStatus(RtpwmY);
+ motor[TIRE_BR].dir = SetStatus(-RtpwmY);
+ motor[TIRE_BL].dir = SetStatus(-RtpwmY);
+ motor[TIRE_FR].pwm = SetPWM(RtpwmY);
+ motor[TIRE_FL].pwm = SetPWM(RtpwmY);
+ motor[TIRE_BR].pwm = SetPWM(RtpwmY);
+ motor[TIRE_BL].pwm = SetPWM(RtpwmY);
+ }
+ if(goalY - 15 < disY && disY < goalY + 15){
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ Rt_flagY = false;
+ Rt_flagX = true;
+ }
+ if(Rt_flagX){
+ motor[TIRE_FR].dir = SetStatus(RtpwmX);
+ motor[TIRE_FL].dir = SetStatus(-RtpwmX);
+ motor[TIRE_BR].dir = SetStatus(RtpwmX);
+ motor[TIRE_BL].dir = SetStatus(-RtpwmX);
+ motor[TIRE_FR].pwm = SetPWM(RtpwmX);
+ motor[TIRE_FL].pwm = SetPWM(RtpwmX);
+ motor[TIRE_BR].pwm = SetPWM(RtpwmX);
+ motor[TIRE_BL].pwm = SetPWM(RtpwmX);
+ }
+ if(goalX - 15 < disX && disX < goalX + 15){
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ Rt_flagX = false;
+ }else{
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ }*/
}
#endif
#if USE_PROCESS_NUM>6
static void Process6()
{
+ /*static bool color_flag = false;
+
+ static bool traceon = false;//fase1
+ static bool yokofla = false;//fase2
+ static bool boxslip = false;//fase3
+
+ static bool syu = false;
+
+ static bool compA = false;
+ static bool compB = false;
+ static bool compC = false;
+ static bool compD = false;
+
+ static bool invationA = false;
+ static bool invationB = false;
+ static bool invationC = false;
+ static bool invationD = false;
+
+
+ ColorDetection();
+
+ //
+ if(Color_A[0] > Point[0] && Color_A[1] > Point[1] && Color_A[2] > Point[2] && !compA)//白
+ {
+ invationA ^= 1;//start false,over true
+ compA = true;//on true,noon false
+ }
+ else if(!(Color_A[0] > Point[0] && Color_A[1] > Point[1] && Color_A[2] > Point[2]))compA = false;//茶
+
+ if(Color_B[0] > Point[0] && Color_B[1] > Point[1] && Color_B[2] > Point[2] && !compB)//白
+ {
+ invationB ^= 1;//start false,over true
+ compB = true;//on true,noon false
+ }
+ else if(!(Color_B[0] > Point[0] && Color_B[1] > Point[1] && Color_B[2] > Point[2]))compB = false;//茶
+ /*
+ if(Color_C[0] > Point[0] && Color_C[1] > Point[1] && Color_C[2] > Point[2] && !compC)//白
+ {
+ invationC ^= 1;//start false,over true
+ compC = true;//on true,noon false
+ }
+ else if(!(Color_C[0] > Point[0] && Color_C[1] > Point[1] && Color_C[2] > Point[2]))compC = false;//茶
+
+ if(Color_D[0] > Point[0] && Color_D[1] > Point[1] && Color_D[2] > Point[2] && !compD)//白
+ {
+ invationD ^= 1;//start false,over true
+ compD = true;//on true,noon false
+ }
+ else if(!(Color_D[0] > Point[0] && Color_D[1] > Point[1] && Color_D[2] > Point[2]))compD = false;//茶
+ */
+ //
+ /*
+ if(controller->Button.B && !color_flag)
+ {
+ traceon ^= 1;
+ color_flag = true;
+ }
+ else if(!controller->Button.B)color_flag = false;
+
+ if(traceon && !yokofla && !boxslip && !syu)
+ {
+ if(!invationA && !compA && !invationB && !compB)
+ {
+ motor[TIRE_FR].dir = FOR;
+ motor[TIRE_FL].dir = FOR;
+ motor[TIRE_BR].dir = BACK;
+ motor[TIRE_BL].dir = BACK;
+
+ motor[TIRE_FR].pwm = startP;
+ motor[TIRE_FL].pwm = startP;
+ motor[TIRE_BR].pwm = startP;
+ motor[TIRE_BL].pwm = startP;
+ }
+ else if(invationA && compA && !invationB && !compB)
+ {
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+
+ wait(2);
+
+ syu = true;
+ yokofla = false;
+ traceon = false;
+ }
+ else{
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ }
+ }
+
+ pointcalculation();
+
+ if(syu && !traceon && !yokofla && !boxslip)
+ {
+ if(Asasult < Bsasult +10 && Asasult > Bsasult -10 || Bsasult < Asasult +10 && Bsasult > Asasult -10)
+ {
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+
+ wait(2);
+
+ yokofla = true;
+ traceon = false;
+ syu = false;
+ }
+ else if(Asasult < Bsasult && !(Asasult < Bsasult +10 && Asasult > Bsasult -10 || Bsasult < Asasult +10 && Bsasult > Asasult -10))
+ {
+ motor[TIRE_FR].dir = FOR;
+ motor[TIRE_FL].dir = FOR;
+ motor[TIRE_BR].dir = FOR;
+ motor[TIRE_BL].dir = FOR;
+
+ motor[TIRE_FR].pwm = startP;
+ motor[TIRE_FL].pwm = startP;
+ motor[TIRE_BR].pwm = startP;
+ motor[TIRE_BL].pwm = startP;
+ }
+ else if(Asasult > Bsasult && !(Asasult < Bsasult +10 && Asasult > Bsasult -10 || Bsasult < Asasult +10 && Bsasult > Asasult -10))
+ {
+ motor[TIRE_FR].dir = BACK;
+ motor[TIRE_FL].dir = BACK;
+ motor[TIRE_BR].dir = BACK;
+ motor[TIRE_BL].dir = BACK;
+
+ motor[TIRE_FR].pwm = startP;
+ motor[TIRE_FL].pwm = startP;
+ motor[TIRE_BR].pwm = startP;
+ motor[TIRE_BL].pwm = startP;
+ }
+ else
+ {
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ }
+ }
+
+ if(!syu && !traceon && yokofla && !boxslip)
+ {
+ motor[TIRE_FR].dir = FOR;
+ motor[TIRE_FL].dir = BACK;
+ motor[TIRE_BR].dir = FOR;
+ motor[TIRE_BL].dir = BACK;
+
+ motor[TIRE_FR].pwm = startP;
+ motor[TIRE_FL].pwm = startP;
+ motor[TIRE_BR].pwm = startP;
+ motor[TIRE_BL].pwm = startP;
+ }
+ else if(LimitSw::IsPressed(Lim_R) && LimitSw::IsPressed(Lim_L))
+ {
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+
+ wait(2);
+
+ boxslip = true;
+ yokofla = false;
+ }
+ else
+ {
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+ }
+
+ */
}
#endif
@@ -801,10 +1085,27 @@
}
#pragma region USER-DEFINED-FUNCTIONS
-void rotconpulex()
- {
+void pointcalculation(){
+ ColorDetection();
+ /*if(Color_A[0] > Point[0] && Color_A[1] > Point[1] && Color_A[2] > Point[2] && !compA)//白
+ {
+ invationA ^= 1;//start false,over true
+ compA = true;//on true,noon false
+ }
+ else if(!(Color_A[0] > Point[0] && Color_A[1] > Point[1] && Color_A[2] > Point[2]))compA = false;//茶*/
+ for(int i=0;i<3;i++){Asasult += Color_A[i]-Point[i];}
+ for(int i=0;i<3;i++){Bsasult += Color_B[i]-Point[i];}
+ for(int i=0;i<3;i++){Csasult += Color_A[i]-Point[i];}
+ for(int i=0;i<3;i++){Dsasult += Color_B[i]-Point[i];}
+}
+
+void filip(){
+ palseX = RtX.getPulses();
+ palseY = RtY.getPulses();
- }
+ rpmX = palseX/(ROTATE_PER_REVOLUTIONS*2);
+ rpmY = palseY/(ROTATE_PER_REVOLUTIONS*2);
+}
void ColorDetection(){
