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:
- 11:028a150943b5
- Parent:
- 10:1295d39fec3a
- Child:
- 12:c09b3e08a316
--- a/System/Process/Process.cpp Fri Oct 05 12:17:21 2018 +0000
+++ b/System/Process/Process.cpp Sat Oct 06 08:30:58 2018 +0000
@@ -42,23 +42,6 @@
Serial pc(USBTX, USBRX);
-unsigned long ColorIn(int index)
-{
- int result = 0;
- bool rtn = false;
- for(int i=0; i<12; i++)
- {
- CK[index] = 1;
- rtn = DOUT[index];
- CK[index] = 0;
- if(rtn)
- {
- result|=(1 << i);
- }
- }
- return result;
-}
-
#define TIRE_FR 0 //足回り前右
#define TIRE_FL 1 //足回り前左
#define TIRE_BR 2 //足回り後右
@@ -73,6 +56,8 @@
#define Lim_L 1 //センター左
#define EMS_0 LimitSw::IsPressed(8)
#define EMS_1 LimitSw::IsPressed(9)
+#define LS LimitSw::IsPressed(7) //赤ゾーン用スイッチ
+#define BS LimitSw::IsPressed(6) //青ゾーン用スイッチ
//************メカナム********************
const int mecanum[15][15]=
@@ -118,6 +103,22 @@
int Color_D[3];
int intergration = 50;
+unsigned long ColorIn(int index)
+{
+ int result = 0;
+ bool rtn = false;
+ for(int i=0; i<12; i++)
+ {
+ CK[index] = 1;
+ rtn = DOUT[index];
+ CK[index] = 0;
+ if(rtn)
+ {
+ result|=(1 << i);
+ }
+ }
+ return result;
+}
void ColorDetection();
//************カラーセンサ********************
@@ -163,21 +164,30 @@
//************ジャイロ*******************
bool Angle_flagI = false;
-float Angle;
+int Angle;
PID gyro = PID(0.03, -150 , 150 , 8 , 0.03, 0);
-
float rotateY;
-int AngletargetX = 18;
-int AngletargetY = -35;
+//初期値 -5
+int AngletargetX = 4;
+int AngletargetY = -12;
int Angle_I = -5;
//************ジャイロ*******************
//************Buzzer******************
-DigitalOut buzzer(BUZZER_PIN);
+//DigitalOut buzzer(BUZZER_PIN);
+PwmOut buzzer(BUZZER_PIN);
void BuzzerTimer_func();
Ticker BuzzerTimer;
bool Emsflag = false;
//************Buzzer******************
+
+//************TapeLed*****************
+void TapeLedEms_func();
+TapeLedData tapeLED;
+TapeLedData sendLedData;
+TapeLED_Mode ledMode = Normal;
+Ticker tapeLedTimer;
+//************TapaLed*****************
#pragma endregion USER-DEFINED_VARIABLES_AND_PROTOTYPE
#ifdef USE_SUBPROCESS
@@ -216,10 +226,10 @@
void SystemProcessInitialize()
{
#pragma region USER-DEFINED_VARIABLE_INIT
+ /*Replace here with the initialization code of your variables.*/
get_rpm.attach_us(&filip,100);
+ buzzer.period(1.0/800);
- /*Replace here with the initialization code of your variables.*/
-
#pragma endregion USER-DEFINED_VARIABLE_INIT
lock = true;
@@ -302,65 +312,6 @@
while(1)
{
- /*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 - 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;
- }
- pc.printf("%f \r\n",RtpwmX);
- wait_ms(50);
-
-
- /*if(LimitSw::IsPressed(9)) LED_DEBUG0 = LED_ON;
- else LED_DEBUG0 = LED_OFF;*/
-
#ifdef USE_MU
controller = CONTROLLER::Controller::GetData();
#endif
@@ -389,15 +340,33 @@
}
if ((EMS_0 || EMS_1) && !Emsflag){
- buzzer = 1;
+ buzzer = 0.5;
BuzzerTimer.attach(BuzzerTimer_func, 1.2);
Emsflag = true;
+ ledMode = EMS;
+ current = 0;
+ tapeLedTimer.attach(TapeLedEms_func, 1.2);
+ sendLedData.code = (uint32_t)Red;
}
if(!EMS_0 && !EMS_1) {
buzzer = 0;
BuzzerTimer.detach();
Emsflag = false;
+ if(ledMode == EMS) ledMode = Normal;
+ tapeLedTimer.detach();
+ }
+
+ switch(ledMode)
+ {
+ case EMS :
+ break;
+
+ case Normal :
+ sendLedData.code = tapeLED.code;
+
+ default:
+ break;
}
SystemProcessUpdate();
@@ -455,6 +424,12 @@
}
}
+ else{
+ motor[Angle_R].dir = BRAKE;
+ motor[Angle_L].dir = BRAKE;
+ motor[Angle_R].pwm = 255;
+ motor[Angle_L].pwm = 255;
+ }
}
#endif
@@ -751,7 +726,7 @@
float rotateY = (y - 305)/2.21 - 90;
Angle += rotateY;
}
- Angle = Angle /20;
+ Angle = Angle/20;
pc.printf("Y:%d \r\n",Angle);
}
#endif
@@ -1156,7 +1131,7 @@
motor[TIRE_BR].pwm = 255;
motor[TIRE_BL].pwm = 255;
}
- pc.printf("X:%d \r\n",RtpwmX);
+ //pc.printf("X:%d \r\n",RtpwmX);
}
#endif
@@ -1262,6 +1237,15 @@
Color_D[2] = ColorIn(3);
}
void BuzzerTimer_func() {
- buzzer = !buzzer;
+ if(buzzer == 0.5){
+ buzzer = 0;
+ }
+ else if(buzzer == 0){
+ buzzer = 0.5;
+ }
+}
+
+void TapeLedEms_func() {
+ sendLedData.code = sendLedData.code == (uint32_t)Red ? (uint32_t)Black : (uint32_t)Red;
}
#pragma endregion