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: mbed TrapezoidControl QEI
Diff: System/Process/Process.cpp
- Revision:
- 10:1295d39fec3a
- Parent:
- 9:f93fc79a49ea
- Child:
- 11:028a150943b5
diff -r f93fc79a49ea -r 1295d39fec3a System/Process/Process.cpp
--- a/System/Process/Process.cpp Thu Oct 04 12:14:25 2018 +0000
+++ b/System/Process/Process.cpp Fri Oct 05 12:17:21 2018 +0000
@@ -139,14 +139,12 @@
//************ライントレース変数*******************
-//ROタコン
+//************ROタコン******************
QEI RtX(RT11_PIN, RT12_PIN, NC, ROTATE_PER_REVOLUTIONS, QEI::X4_ENCODING);
QEI RtY(RT21_PIN, RT22_PIN, NC, ROTATE_PER_REVOLUTIONS, QEI::X4_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;
-
double rpmX;
double rpmY;
double disX;
@@ -157,11 +155,10 @@
int RtpwmY;
double goalX = 1200.000;
double goalY = 900.000;
-
void filip();
//PID startup = PID(0.03, -255, 255, 0.3, 0, 0);
-//ROタコン
+//************ROタコン******************
//************ジャイロ*******************
@@ -170,8 +167,8 @@
PID gyro = PID(0.03, -150 , 150 , 8 , 0.03, 0);
float rotateY;
-int AngletargetX = 20;
-int AngletargetY = -20;
+int AngletargetX = 18;
+int AngletargetY = -35;
int Angle_I = -5;
//************ジャイロ*******************
@@ -391,8 +388,8 @@
}
}
- if (EMS_0 || EMS_1 && !Emsflag){
- buzzer = 1;
+ if ((EMS_0 || EMS_1) && !Emsflag){
+ buzzer = 1;
BuzzerTimer.attach(BuzzerTimer_func, 1.2);
Emsflag = true;
}
@@ -414,7 +411,10 @@
#ifdef USE_SUBPROCESS
#if USE_PROCESS_NUM>0
static void Process0()
-{
+{
+ static bool Xnopush = false;
+ static bool Angle_flagX = false;
+
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;
@@ -433,22 +433,28 @@
Angle += rotateY;
}
Angle = Angle /20;
- int gyropwm = gyro.SetPV(Angle,Angle_I);
+ int gyropwmX = gyro.SetPV(Angle,AngletargetX);
+
+ if(controller->Button.X && !Xnopush){
+ Angle_flagX = true;
+ Xnopush = true;
+ }else if(!controller->Button.X)Xnopush = false;
- if(controller->Button.A){
- Angle_flagI = true;
- }
- if (Angle_flagI){
- motor[Angle_R].dir = SetStatus(gyropwm);
- motor[Angle_L].dir = SetStatus(-gyropwm);
- motor[Angle_R].pwm = SetPWM(gyropwm);
- motor[Angle_L].pwm = SetPWM(gyropwm);
- if(Angle_I - 2 < Angle && Angle < Angle_I + 2){
+
+ if (Angle_flagX){
+ motor[Angle_R].dir = SetStatus(-gyropwmX);
+ motor[Angle_L].dir = SetStatus(gyropwmX);
+ motor[Angle_R].pwm = SetPWM(gyropwmX);
+ motor[Angle_L].pwm = SetPWM(gyropwmX);
+ if(AngletargetX - 2 < Angle && Angle < AngletargetX + 2){
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
- Angle_flagI = false;
+ motor[Angle_R].pwm = 255;
+ motor[Angle_L].pwm = 255;
+ Angle_flagX = false;
}
}
+
}
#endif
@@ -724,14 +730,20 @@
}else{
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
+ motor[Angle_R].pwm = 255;
+ motor[Angle_L].pwm = 255;
}
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;
}
for(int i = 0;i<20;i++){
float y = 0;
@@ -740,7 +752,7 @@
Angle += rotateY;
}
Angle = Angle /20;
- pc.printf("Y:%f \r\n",Angle);
+ pc.printf("Y:%d \r\n",Angle);
}
#endif
@@ -772,18 +784,19 @@
Angle += rotateY;
}
Angle = Angle /20;
+
int gyropwmX = gyro.SetPV(Angle,AngletargetX);
int gyropwmY = gyro.SetPV(Angle,AngletargetY);
if(controller->Button.X && !Xnopush){
Angle_flagX = true;
Xnopush = true;
- }else{Xnopush = false;}
+ }else if(!controller->Button.X)Xnopush = false;
if(controller->Button.Y && !Ynopush){
Angle_flagY = true;
Ynopush = true;
- }else{Ynopush = false;}
+ }else if(!controller->Button.Y)Ynopush = false;
if (Angle_flagX){
motor[Angle_R].dir = SetStatus(gyropwmX);
@@ -793,18 +806,22 @@
if(AngletargetX - 2 < Angle && Angle < AngletargetX + 2){
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
+ motor[Angle_R].pwm = 255;
+ motor[Angle_L].pwm = 255;
Angle_flagX = false;
}
}
if (Angle_flagY){
- motor[Angle_R].dir = SetStatus(gyropwmY);
- motor[Angle_L].dir = SetStatus(-gyropwmY);
+ motor[Angle_R].dir = SetStatus(-gyropwmY);
+ motor[Angle_L].dir = SetStatus(gyropwmY);
motor[Angle_R].pwm = SetPWM(gyropwmY);
motor[Angle_L].pwm = SetPWM(gyropwmY);
if(AngletargetY - 2 < Angle && Angle < AngletargetY + 2){
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
+ motor[Angle_R].pwm = 255;
+ motor[Angle_L].pwm = 255;
Angle_flagY = false;
}
}
@@ -830,7 +847,10 @@
else{
motor[Angle_R].dir = BRAKE;
motor[Angle_L].dir = BRAKE;
+ motor[Angle_R].pwm = 255;
+ motor[Angle_L].pwm = 255;
}
+ //pc.printf("%d \r\n",gyropwmY);
}
#endif
@@ -852,7 +872,7 @@
if(controller->Button.B && !nopushed){
Rt_flagY = true;
nopushed = true;
- }else{nopushed = false;}
+ }else if(!controller->Button.B)nopushed = false;
if (Rt_flagY && SetPWM(RtpwmY) > 0){
@@ -874,6 +894,11 @@
motor[TIRE_FL].dir = BRAKE;
motor[TIRE_BR].dir = BRAKE;
motor[TIRE_BL].dir = BRAKE;
+ motor[TIRE_FR].pwm = 255;
+ motor[TIRE_FL].pwm = 255;
+ motor[TIRE_BR].pwm = 255;
+ motor[TIRE_BL].pwm = 255;
+
}
else
{
@@ -881,14 +906,18 @@
motor[TIRE_FL].dir = BRAKE;
motor[TIRE_BR].dir = BRAKE;
motor[TIRE_BL].dir = BRAKE;
+ motor[TIRE_FR].pwm = 255;
+ motor[TIRE_FL].pwm = 255;
+ motor[TIRE_BR].pwm = 255;
+ motor[TIRE_BL].pwm = 255;
}
//pc.printf("RtpwmX:%f \r\n", RtpwmX);
- pc.printf("PWM:%d \r\n", RtpwmY);
- pc.printf("回転数:%f \r\n" ,rpmY);
- pc.printf("距離:%f \r\n", disY);
+ //pc.printf("PWM:%d \r\n", RtpwmY);
+ //pc.printf("回転数:%f \r\n" ,rpmY);
+ //pc.printf("距離:%f \r\n", disY);
}
@@ -1080,19 +1109,54 @@
#if USE_PROCESS_NUM>7
static void Process7()
{
- //et_rpm.attach_us(&filip,1000);
+ static bool nopushed = false;
+ static bool Rt_flagX = false;
- disX = 48*3.141*rpmX;
- disY = 48*3.141*rpmY;
+ if(controller->Button.A && !nopushed){
+ Rt_flagX = true;
+ nopushed = true;
+ }else if(!controller->Button.A)nopushed = false;
+
- RtpwmX = Rt_X.SetPV(disX , goalX);
- RtpwmY = Rt_Y.SetPV(disY , goalY);
-
- /*pc.printf("disX:%f \r\n", disX);
- pc.printf("disY:%f \r\n", disY);
- pc.printf("RtpwmX:%f \r\n", RtpwmX);
- pc.printf("RtpwmY:%f \r\n", RtpwmY);
- wait_ms(50);*/
+ if (Rt_flagX && SetPWM(RtpwmX) > 0){
+ filip();
+
+ 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);
+ }
+ else if(Rt_flagX && SetPWM(RtpwmX) < 0)
+ {
+ filip();
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+
+ motor[TIRE_FR].pwm = 255;
+ motor[TIRE_FL].pwm = 255;
+ motor[TIRE_BR].pwm = 255;
+ motor[TIRE_BL].pwm = 255;
+
+ }
+ else
+ {
+ motor[TIRE_FR].dir = BRAKE;
+ motor[TIRE_FL].dir = BRAKE;
+ motor[TIRE_BR].dir = BRAKE;
+ motor[TIRE_BL].dir = BRAKE;
+
+ motor[TIRE_FR].pwm = 255;
+ motor[TIRE_FL].pwm = 255;
+ motor[TIRE_BR].pwm = 255;
+ motor[TIRE_BL].pwm = 255;
+ }
+ pc.printf("X:%d \r\n",RtpwmX);
}
#endif
@@ -1150,10 +1214,10 @@
rpmX = (double)palseX/(ROTATE_PER_REVOLUTIONS*4);
rpmY = (double)palseY/(ROTATE_PER_REVOLUTIONS*4);
- //disX = 48*3.141592*rpmX;
+ disX = 48*3.141*rpmX;
disY = 48*3.141*rpmY;
- //RtpwmX = (int)Rt_X.SetPV(disX , goalX);
+ RtpwmX = (int)Rt_X.SetPV(disX , goalX);
RtpwmY = (int)Rt_Y.SetPV(disY , goalY);
}