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:
- 16:3f2c2d89372b
- Parent:
- 15:dfcec98f5aa9
- Child:
- 17:50dc4b449e69
diff -r dfcec98f5aa9 -r 3f2c2d89372b System/Process/Process.cpp
--- a/System/Process/Process.cpp Sun Oct 21 02:14:15 2018 +0000
+++ b/System/Process/Process.cpp Mon Jul 01 13:00:20 2019 +0000
@@ -8,20 +8,15 @@
#include "../../Communication/Controller/Controller.h"
#include "../../Input/ExternalInt/ExternalInt.h"
#include "../../Input/Switch/Switch.h"
-#include "../../Input/ColorSensor/ColorSensor.h"
-#include "../../Input/AccelerationSensor/AccelerationSensor.h"
#include "../../Input/Potentiometer/Potentiometer.h"
-#include "../../Input/Rotaryencoder/Rotaryencoder.h"
+#include "../../Input/Encoder/Encoder.h"
#include "../../LED/LED.h"
#include "../../Safty/Safty.h"
#include "../Using.h"
-
using namespace SWITCH;
-using namespace COLORSENSOR;
-using namespace ACCELERATIONSENSOR;
using namespace PID_SPACE;
-using namespace ROTARYENCODER;
+using namespace ENCODER;
static CONTROLLER::ControllerData *controller;
ACTUATORHUB::MOTOR::MotorStatus motor[MOUNTING_MOTOR_NUM];
@@ -43,134 +38,22 @@
Serial pc(USBTX, USBRX);
-//************メカナム********************
-
-const int mecanum[15][15]=
-{
- { 0, 5, 21, 47, 83, 130, 187, 255, 255, 255, 255, 255, 255, 255, 255},
- { -5, 0, 5, 21, 47, 83, 130, 187, 193, 208, 234, 255, 255, 255, 255},
- { -21, -5, 0, 5, 21, 47, 83, 130, 135, 151, 177, 213, 255, 255, 255},
- { -47, -21, 5, 0, 5, 21, 47, 83, 88, 104, 130, 167, 213, 255, 255},
- { -83, -47, -21, 5, 0, 5, 21, 47, 52, 68, 94, 130, 177, 234, 255},
- {-130, -83, -47, -21, 5, 0, 5, 21, 26, 42, 68, 104, 151, 208, 255},
- {-187, -130, -83, -47, -21, -5, 0, 5, 10, 26, 52, 88, 135, 193, 255},
- {-255, -187, -130, -83, -47, -21, -5, 0, 5, 21, 47, 83, 130, 187, 255},
- {-255, -193, -135, -88, -52, -26, -10, -5, 0, 5, 21, 47, 83, 130, 187},
- {-255, -208, -151, -104, -68, -42, -26, -21, -5, 0, 5, 21, 47, 83, 130},
- {-255, -234, -177, -130, -94, -68, -52, -47, -21, -7, 0, 7, 21, 47, 83},
- {-255, -255, -213, -167, -130, -104, -88, -83, -47, -21, -5, 0, 5, 21, 47},
- {-255, -255, -255, -213, -177, -151, -135, -130, -83, -47, -21, -5, 0, 5, 21},
- {-255, -255, -255, -255, -234, -208, -193, -187, -130, -83, -47, -21, -5, 0, 5},
- {-255, -255, -255, -255, -255, -255, -255, -255, -187, -130, -83, -47, -21, -5, 0}
-};
-
-const int curve[15] = {-204, -150, -104, -66, -38, -17, -4, 0, 4, 17, 38, 66, 104, 150, 204};
-uint8_t SetStatus(int);
-uint8_t SetStatus(int pwmVal){
- if(pwmVal < 0) return BACK;
- else if(pwmVal > 0) return FOR;
- else if(pwmVal == 0) return BRAKE;
- else return BRAKE;
-}
-uint8_t SetPWM(int);
-uint8_t SetPWM(int pwmVal){
- if(pwmVal == 0 || pwmVal > 255 || pwmVal < -255) return 255;
- else return abs(pwmVal);
-}
-
-//************メカナム********************
-
-//************カラーセンサ********************
-
-int Color_A[3]; //[赤,緑,青]
-int Color_B[3];
-int Color_C[3];
-int Color_D[3];
-int intergration = 50;
-
-int Avecolor_A[3];
-int Avecolor_B[3];
-int Avecolor_C[3];
-int Avecolor_D[3];
-
-void ColorIn();
-void ColorDetection();
-void getcolor();
-
-//************カラーセンサ********************
+//**************Encoder***************
+const int PerRev = 256;
+QEI ECD_0(ECD_A_0,ECD_B_0,NC,PerRev,QEI::X4_ENCODING);
+QEI ECD_1(ECD_A_1,ECD_B_1,NC,PerRev,QEI::X4_ENCODING);
+QEI ECD_2(ECD_A_2,ECD_B_2,NC,PerRev,QEI::X4_ENCODING);
+QEI ECD_3(ECD_A_3,ECD_B_3,NC,PerRev,QEI::X4_ENCODING);
+//**************Encoder***************
-//************ライントレース変数*******************
-int PointA[3] = {400, 700, 1000};//赤,緑,青
-int PointB[3] = {400, 700, 1000};//赤,緑,青
-int PointC[3] = {1000, 1700, 2400};//赤,緑,青
-
-int startP = 35;
-int downP = 5;
-
-int Asasult = 0;
-int Bsasult = 0;
-int Csasult = 0;
-int Dsasult = 0;
-
-bool compA = false;
-bool compB = false;
-bool compC = false;
-bool compD = false;
-
-bool invationA = false;
-bool invationB = false;
-bool invationC = false;
-bool invationD = false;
-
-Ticker Color_T;
-
-void ColorDetection();
-void Color_changeflag();
-
-//************ライントレース変数*******************
-
-//************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.12, 0, 0);
-PID Rt_Y = PID(0.03, -255, 255, 0.1, 0, 0);
-double rpmX;
-double rpmY;
-double disX;
-double disY;
-int palseX;
-int palseY;
-int RtpwmX;
-int RtpwmY;
-double goalX = 900.000;
-double goalY = 700.000;
-
-//double goalXB = 900.000;
-//double goalYB = 700.000;
-void filip();
-void filipB();
-
-//************ROタコン******************
-
-//************ジャイロ*******************
-bool Angle_flagI = false;
-int Angle;
-PID gyro = PID(0.03, -150 , 150 , 8 , 0.03, 0);
-float rotateY;
-//初期値 -5
-int AngletargetX = 4;
-int AngletargetY = -12;
-int AngletargetI = -5;
-//************ジャイロ*******************
-
-//************Buzzer******************
+//**************Buzzer****************
//DigitalOut buzzer(BUZZER_PIN);
-PwmOut buzzer(BUZZER_PIN);
void BuzzerTimer_func();
Ticker BuzzerTimer;
-bool Emsflag = false;
-//************Buzzer******************
+bool EMGflag = false;
+PwmOut buzzer(BUZZER_PIN);
+//buzzer.period(1.0/800);
+//**************Buzzer****************
//************TapeLed*****************
void TapeLedEms_func();
@@ -179,6 +62,7 @@
TapeLED_Mode ledMode = Normal;
Ticker tapeLedTimer;
//************TapaLed*****************
+
#pragma endregion USER-DEFINED_VARIABLES_AND_PROTOTYPE
#ifdef USE_SUBPROCESS
@@ -217,10 +101,7 @@
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;
@@ -303,11 +184,9 @@
while(1)
{
- getcolor();
- pc.printf("R1:%d, G1:%d, B1:%d \r\n",Avecolor_A[0],Avecolor_A[1],Avecolor_A[2]);
- pc.printf("R2:%d, G2:%d, B2:%d \r\n",Avecolor_B[0],Avecolor_B[1],Avecolor_B[2]);
- pc.printf("R3:%d, G3:%d, B3:%d \r\n",Avecolor_C[0],Avecolor_C[1],Avecolor_C[2]);
- pc.printf("R4:%d, G4:%d, B4:%d \r\n",Avecolor_D[0],Avecolor_D[1],Avecolor_D[2]);
+ //LED_DEBUG0 = !LED_DEBUG0;
+ //LED_DEBUG1 = !LED_DEBUG1;
+ //printf("%d\r\n",ECD_0.getPulses());
#ifdef USE_MU
controller = CONTROLLER::Controller::GetData();
@@ -319,7 +198,7 @@
CONTROLLER::Controller::DataReset();
AllActuatorReset();
lock = true;
- buzzer = 0.5;
+ buzzer = 1;
BuzzerTimer.attach(BuzzerTimer_func, 0.5);
}
else
@@ -338,34 +217,17 @@
}
}
- if ((EMS_0 || EMS_1) && !Emsflag){
- buzzer = 0.5;
+ //Emergency!
+ if(EMG_0 || EMG_1){
+ buzzer = 1;
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) {
+ //Safety
+ if(!EMG_0 && !EMG_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();
@@ -380,338 +242,28 @@
#if USE_PROCESS_NUM>0
static void Process0()
{
- tapeLED.code = (uint32_t)Green;
- if(RedSW){
- current = 1;
- }
- if(BlueSW){
- current = 2;
- }
+
}
#endif
#if USE_PROCESS_NUM>1
-static void Process1() //手動
+static void Process1()
{
- tapeLED.code = (uint32_t)Orange;
- motor[TIRE_FR].dir = SetStatus(-mecanum[controller->AnalogL.Y][14-controller->AnalogL.X] + curve[controller->AnalogR.X]);
- motor[TIRE_FL].dir = SetStatus(mecanum[controller->AnalogL.Y][controller->AnalogL.X] + curve[controller->AnalogR.X]);
- motor[TIRE_BR].dir = SetStatus(-mecanum[14-controller->AnalogL.X][14-controller->AnalogL.Y] + curve[controller->AnalogR.X]);
- motor[TIRE_BL].dir = SetStatus(mecanum[controller->AnalogL.X][14-controller->AnalogL.Y] + curve[controller->AnalogR.X]);
-
- motor[TIRE_FR].pwm = SetPWM(mecanum[controller->AnalogL.Y][14-controller->AnalogL.X]) *0.8;
- motor[TIRE_FL].pwm = SetPWM(mecanum[controller->AnalogL.Y][controller->AnalogL.X]) *0.8;
- motor[TIRE_BR].pwm = SetPWM(mecanum[14-controller->AnalogL.X][14-controller->AnalogL.Y]) *0.8;
- motor[TIRE_BL].pwm = SetPWM(mecanum[controller->AnalogL.X][14-controller->AnalogL.Y]) *0.8;
-
- if (abs(controller->AnalogL.X-7) <= 4 && controller->AnalogL.X!=7 && controller->AnalogL.Y!=7 && controller->AnalogR.X==7){
- motor[TIRE_FR].pwm = motor[TIRE_FR].pwm * 1.3;
- motor[TIRE_FL].pwm = motor[TIRE_FL].pwm * 1.3;
- }
- if(controller->Button.R){
- motor[Angle_R].dir = FOR;
- motor[Angle_L].dir = BACK;
- motor[Angle_R].pwm = 150;
- motor[Angle_L].pwm = 150;
- }else if(controller->Button.L){
- motor[Angle_R].dir = BACK;
- motor[Angle_L].dir = FOR;
- motor[Angle_R].pwm = 150;
- motor[Angle_L].pwm = 150;
- }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;
- y = acc[1]*1000;
- float rotateY = (y - 305)/2.21 - 90;
- Angle += rotateY;
- }
- Angle = Angle/20;
- pc.printf("Y:%d \r\n",Angle);*/
-
- //wheel.getPulses()...どちらの方向にどれだけ回ったか
- //pc.printf("Pulses:%07d \r\n",wheel.getPulses());
- //軸が何回転したか
- //pc.printf("Rotate:%04.3f \r\n",(double)wheel.getPulses()/(ROTATE_PER_REVOLUTIONS*4));
}
#endif
#if USE_PROCESS_NUM>2
-static void Process2() //trace
+static void Process2()
{
- tapeLED.code = (uint32_t)Yellow;
- static bool color_flag = false;
-
- static bool traceon = false;//fase1
- static bool yokofla = false;//fase2
- static bool boxslip = false;//fase3
-
- //static bool syu = false;
-
- ColorDetection();
- Color_changeflag();
-
- if(controller->Button.B && !color_flag)
- {
- traceon = true;
- color_flag = true;
- }
- else if(!controller->Button.B)color_flag = false;
-
- if(traceon)
- {
- Color_changeflag();
- 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;
-
- Color_changeflag();
- }
- else if(invationC && compC && !invationB && !compB)
- {
- for(int i = 0; i<1000; i++){
- 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;
- }
-
- yokofla = true;
- traceon = false;
- }
- }
-
- if(yokofla && !traceon)
- {
- //pointcalculation();
- Color_changeflag();
- 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;
-
- motor[TIRE_FR].pwm = 255;
- motor[TIRE_FL].pwm = 255;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 255;
-
- wait(2);
-
- boxslip = true;
- yokofla = false;
- }
- else if(compA && compB && compC)
- {
- 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;
-
- Color_changeflag();
- }
- else if(invationA && invationB && invationC)
- {
- motor[TIRE_FR].dir = FREE;
- motor[TIRE_FL].dir = BACK;
- motor[TIRE_BR].dir = FOR;
- motor[TIRE_BL].dir = FREE;
-
- //motor[TIRE_FR].pwm = startP;
- motor[TIRE_FL].pwm = startP;
- motor[TIRE_BR].pwm = startP;
- //motor[TIRE_BL].pwm = startP;
- }
- else if(!invationA && !invationB && !invationC)
- {
- motor[TIRE_FR].dir = FOR;
- motor[TIRE_FL].dir = FREE;
- motor[TIRE_BR].dir = FREE;
- 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 && compC && invationC)//C固定A下
- {
- motor[TIRE_FR].dir = BRAKE;
- motor[TIRE_FL].dir = BRAKE;
- motor[TIRE_BR].dir = BACK;
- motor[TIRE_BL].dir = BACK;
-
- motor[TIRE_FR].pwm = 255;
- motor[TIRE_FL].pwm = 100;
- motor[TIRE_BR].pwm = 55;
- motor[TIRE_BL].pwm = startP;
-
- Color_changeflag();
- }
- else if(compA && compB && !invationC)//AB固定C下
- {
- motor[TIRE_FR].dir = FOR;
- motor[TIRE_FL].dir = FOR;
- motor[TIRE_BR].dir = BRAKE;
- motor[TIRE_BL].dir = BRAKE;
-
- motor[TIRE_FR].pwm = 55;
- motor[TIRE_FL].pwm = startP;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 100;
-
- Color_changeflag();
- }
- else if(compA && compB && !compC && invationC)//AB固定C上
- {
- motor[TIRE_FR].dir = BACK;
- motor[TIRE_FL].dir = BACK;
- motor[TIRE_BR].dir = BRAKE;
- motor[TIRE_BL].dir = BRAKE;
-
- motor[TIRE_FR].pwm = startP;
- motor[TIRE_FL].pwm = 55;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 100;
-
- Color_changeflag();
- }
- else if(!compA && invationA && compC)//C固定A上
- {
- motor[TIRE_FR].dir = BRAKE;
- motor[TIRE_FL].dir = BRAKE;
- motor[TIRE_BR].dir = FOR;
- motor[TIRE_BL].dir = FOR;
-
- motor[TIRE_FR].pwm = 255;
- motor[TIRE_FL].pwm = 100;
- motor[TIRE_BR].pwm = startP;
- motor[TIRE_BL].pwm = 55;
-
- Color_changeflag();
- }
- }
-
- if(boxslip)
- {
- 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;
- }
}
#endif
#if USE_PROCESS_NUM>3
-static void Process3() //Blue Zone
+static void Process3()
{
- filipB();
-
- static bool Rt_flagX = false;
- static bool Rt_flagY = false;
- if(Rt_flagX)
- {
- filipB();
- if(disX < goalX - 5){
- filipB();
-
- 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)*0.8;
- motor[TIRE_FL].pwm = SetPWM(RtpwmX);
- motor[TIRE_BR].pwm = SetPWM(RtpwmX);
- motor[TIRE_BL].pwm = SetPWM(RtpwmX);
- }
- else if(disX > goalX - 5){
-
- for(int i = 0; i<200; i++){
- 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;
- }
-
- Rt_flagY = true;
- Rt_flagX = false;
- }
- }
-
-if(Rt_flagY && !Rt_flagX){
- filipB();
- if(disY < goalY - 5){
- filipB();
- 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);
- }
- else if(disY > goalY - 5)
- {
- filipB();
- 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*0.85;
- motor[TIRE_FL].pwm = 255;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 255;
- }
- }
}
#endif
@@ -723,491 +275,27 @@
#endif
#if USE_PROCESS_NUM>5
-static void Process5() //ロタコンXY
-{
- tapeLED.code = (uint32_t)White;
-
- static bool nopushed = false;
- static bool Rt_flagX = false;
- static bool Rt_flagY = false;
+static void Process5()
+{
- if(controller->Button.A && !nopushed){
- Rt_flagX = true;
- nopushed = true;
-
- RtX.reset();
- RtY.reset();
- }else if(!controller->Button.A)nopushed = false;
-
- filip();
-
- if(Rt_flagX)
- {
- filip();
- if(disX < goalX - 5){
- 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)*0.8;
- motor[TIRE_FL].pwm = SetPWM(RtpwmX);
- motor[TIRE_BR].pwm = SetPWM(RtpwmX);
- motor[TIRE_BL].pwm = SetPWM(RtpwmX);
- }
- else if(disX > goalX - 5){
-
- for(int i = 0; i<200; i++){
- 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;
- }
-
- Rt_flagY = true;
- Rt_flagX = false;
- }
- }
-
-
-if(Rt_flagY && !Rt_flagX){
- filip();
- if(disY < goalY - 5){
- filip();
- 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);
- }
- else if(disY > goalY - 5)
- {
- 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*0.85;
- motor[TIRE_FL].pwm = 255;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 255;
- }
- }
}
#endif
#if USE_PROCESS_NUM>6
static void Process6()
{
- tapeLED.code = (uint32_t)Yellow;
- static bool color_flag = false;
- static bool traceon = false;//fase1
- static bool yokofla = false;//fase2
- static bool boxslip = false;//fase3
-
- static bool nopushed = false;
- static bool Rt_flagX = false;
- static bool Rt_flagY = false;
-
- //static bool syu = false;
-
- ColorDetection();
- Color_changeflag();
-
- if(controller->Button.B && !color_flag)
- {
- traceon = true;
- color_flag = true;
- }
- else if(!controller->Button.B)color_flag = false;
-
- if(traceon)
- {
- Color_changeflag();
- 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;
-
- Color_changeflag();
- }
- else if(invationC && compC && !invationB && !compB)
- {
- for(int i = 0; i<1000; i++){
- 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;
- }
-
- yokofla = true;
- traceon = false;
- }
- }
-
-
- if(yokofla && !traceon)
- {
- //pointcalculation();
- Color_changeflag();
- 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;
-
- motor[TIRE_FR].pwm = 255;
- motor[TIRE_FL].pwm = 255;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 255;
-
- wait(2);
-
- boxslip = true;
- yokofla = false;
- }
- else if(compA && compB && compC)
- {
- 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;
-
- Color_changeflag();
- }
- else if(invationA && invationB && invationC)
- {
- motor[TIRE_FR].dir = FREE;
- motor[TIRE_FL].dir = BACK;
- motor[TIRE_BR].dir = FOR;
- motor[TIRE_BL].dir = FREE;
-
- //motor[TIRE_FR].pwm = startP;
- motor[TIRE_FL].pwm = startP;
- motor[TIRE_BR].pwm = startP;
- //motor[TIRE_BL].pwm = startP;
- }
- else if(!invationA && !invationB && !invationC)
- {
- motor[TIRE_FR].dir = FOR;
- motor[TIRE_FL].dir = FREE;
- motor[TIRE_BR].dir = FREE;
- 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 && compC && invationC)//C固定A下
- {
- motor[TIRE_FR].dir = BRAKE;
- motor[TIRE_FL].dir = BRAKE;
- motor[TIRE_BR].dir = BACK;
- motor[TIRE_BL].dir = BACK;
-
- motor[TIRE_FR].pwm = 255;
- motor[TIRE_FL].pwm = 100;
- motor[TIRE_BR].pwm = 55;
- motor[TIRE_BL].pwm = startP;
-
- Color_changeflag();
- }
- else if(compA && compB && !invationC)//AB固定C下
- {
- motor[TIRE_FR].dir = FOR;
- motor[TIRE_FL].dir = FOR;
- motor[TIRE_BR].dir = BRAKE;
- motor[TIRE_BL].dir = BRAKE;
-
- motor[TIRE_FR].pwm = 55;
- motor[TIRE_FL].pwm = startP;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 100;
-
- Color_changeflag();
- }
- else if(compA && compB && !compC && invationC)//AB固定C上
- {
- motor[TIRE_FR].dir = BACK;
- motor[TIRE_FL].dir = BACK;
- motor[TIRE_BR].dir = BRAKE;
- motor[TIRE_BL].dir = BRAKE;
-
- motor[TIRE_FR].pwm = startP;
- motor[TIRE_FL].pwm = 55;
- motor[TIRE_BR].pwm = 255;
- motor[TIRE_BL].pwm = 100;
-
- Color_changeflag();
- }
- else if(!compA && invationA && compC)//C固定A上
- {
- motor[TIRE_FR].dir = BRAKE;
- motor[TIRE_FL].dir = BRAKE;
- motor[TIRE_BR].dir = FOR;
- motor[TIRE_BL].dir = FOR;
-
- motor[TIRE_FR].pwm = 255;
- motor[TIRE_FL].pwm = 100;
- motor[TIRE_BR].pwm = startP;
- motor[TIRE_BL].pwm = 55;
-
- Color_changeflag();
- }
- }
-
- if(boxslip)
- {
- for(int i = 0; i<500; i++)
- 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;
-
- Rt_flagX = true;
- nopushed = true;
-
- RtX.reset();
- RtY.reset();
- }
-
-
- /*if(controller->Button.A && !nopushed){
- Rt_flagX = true;
- nopushed = true;
-
- RtX.reset();
- RtY.reset();
- }else if(!controller->Button.A)nopushed = false;
- */
- filip();
-
- if(Rt_flagX)
- {
- filip();
- if(disX < goalX - 5){
- 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)*0.8;
- motor[TIRE_FL].pwm = SetPWM(RtpwmX);
- motor[TIRE_BR].pwm = SetPWM(RtpwmX);
- motor[TIRE_BL].pwm = SetPWM(RtpwmX);
- }
- else if(disX > goalX - 5){
-
- for(int i = 0; i<500; i++){
- 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;
- }
-
- Rt_flagY = true;
- Rt_flagX = false;
- }
- }
-
-
-if(Rt_flagY && !Rt_flagX){
- filip();
- if(disY < goalY - 5){
- filip();
- 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);
- }
- else if(disY > goalY - 5)
- {
- 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;
- }
- }
-
}
#endif
#if USE_PROCESS_NUM>7
static void Process7()
{
- tapeLED.code = (uint32_t)Hotpink;
- static bool Xnopush = false;
- static bool Ynopush = false;
- static bool Inopush = false;
- static bool Angle_flagX = false;
- static bool Angle_flagY = false;
- static bool ANgle_flagI = 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;
- 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;
- y = acc[1]*1000;
- float rotateY = (y - 305)/2.21 - 90;
- Angle += rotateY;
- }
- Angle = Angle /20;
-
- int gyropwmX = gyro.SetPV(Angle,AngletargetX);
- int gyropwmY = gyro.SetPV(Angle,AngletargetY);
- int gyropwmI = gyro.SetPV(Angle,AngletargetI);
-
- if(controller->Button.X && !Xnopush){
- Angle_flagX = true;
- Xnopush = true;
- }else if(!controller->Button.X)Xnopush = false;
-
- if(controller->Button.Y && !Ynopush){
- Angle_flagY = true;
- Ynopush = true;
- }else if(!controller->Button.Y)Ynopush = false;
-
- if(controller->Button.A && !Inopush){
- Angle_flagI = true;
- Inopush = true;
- }else if(!controller->Button.A)Inopush = false;
-
- 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;
- 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].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;
- }
- }
-
- if (Angle_flagI){
- if(Angle < 0)
- {
- motor[Angle_R].dir = SetStatus(-gyropwmI);
- motor[Angle_L].dir = SetStatus(gyropwmI);
- motor[Angle_R].pwm = SetPWM(gyropwmI);
- motor[Angle_L].pwm = SetPWM(gyropwmI);
-
- if(AngletargetI - 2 < Angle && Angle < AngletargetI + 2){
- motor[Angle_R].dir = BRAKE;
- motor[Angle_L].dir = BRAKE;
- motor[Angle_R].pwm = 255;
- motor[Angle_L].pwm = 255;
- Angle_flagI = false;
- }
- }
- else if(Angle > 0)
- {
- motor[Angle_R].dir = FOR;
- motor[Angle_L].dir = BACK;
- motor[Angle_R].pwm = 150;
- motor[Angle_L].pwm = 150;
-
- if(Angle < 0){
- motor[Angle_R].dir = SetStatus(gyropwmI);
- motor[Angle_L].dir = SetStatus(-gyropwmI);
- motor[Angle_R].pwm = SetPWM(gyropwmI);
- motor[Angle_L].pwm = SetPWM(gyropwmI);
-
- if(AngletargetI - 2 < Angle && Angle < AngletargetI + 2){
- motor[Angle_R].dir = BRAKE;
- motor[Angle_L].dir = BRAKE;
- motor[Angle_R].pwm = 255;
- motor[Angle_L].pwm = 255;
- Angle_flagI = false;
- }
- }
- }
- }
- else{
- motor[Angle_R].dir = BRAKE;
- motor[Angle_L].dir = BRAKE;
- motor[Angle_R].pwm = 255;
- motor[Angle_L].pwm = 255;
- }
}
#endif
-#if USE_PROCESS_NUM>8 //kakudo
+#if USE_PROCESS_NUM>8
static void Process8()
{
@@ -1239,169 +327,15 @@
#endif
}
-#pragma region USER-DEFINED-FUNCTIONS
-
-void filip(){
- palseX = RtX.getPulses();
- palseY = RtY.getPulses();
-
- rpmX = (double)palseX/(ROTATE_PER_REVOLUTIONS*4);
- rpmY = (double)palseY/(ROTATE_PER_REVOLUTIONS*4);
-
- disX = 48*3.141*rpmX;
- disY = 48*3.141*rpmY;
-
- RtpwmX = (int)Rt_X.SetPV(disX , goalX);
- RtpwmY = (int)Rt_Y.SetPV(disY , goalY);
-}
-
-void filipB(){
- palseX = RtX.getPulses();
- palseY = RtY.getPulses();
-
- rpmX = (double)palseX/(ROTATE_PER_REVOLUTIONS*4);
- rpmY = (double)palseY/(ROTATE_PER_REVOLUTIONS*4);
-
- disX = abs(48*3.141*rpmX);
- disY = 48*3.141*rpmY;
-
- RtpwmX = (int)Rt_X.SetPV(disX , goalX);
- RtpwmY = (int)Rt_Y.SetPV(disY , goalY);
-}
-
-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(){
- GATE = 0;
-
- CK[0] = 0;
- CK[1] = 0;
- CK[2] = 0;
- CK[3] = 0;
-
- RANGE = 1;
-
- GATE = 1;
- wait_ms(intergration);
- GATE = 0;
- wait_us(4);
-
- Color_A[0] = ColorIn(0); //赤
- wait_us(3);
- Color_A[1] = ColorIn(0); //青
- wait_us(3);
- Color_A[2] = ColorIn(0); //緑
-
- Color_B[0] = ColorIn(1);
- wait_us(3);
- Color_B[1] = ColorIn(1);
- wait_us(3);
- Color_B[2] = ColorIn(1);
-
- Color_C[0] = ColorIn(2);
- wait_us(3);
- Color_C[1] = ColorIn(2);
- wait_us(3);
- Color_C[2] = ColorIn(2);
-
- Color_D[0] = ColorIn(3);
- wait_us(3);
- Color_D[1] = ColorIn(3);
- wait_us(3);
- Color_D[2] = ColorIn(3);
-}
-
-void Color_changeflag(){
- ColorDetection();
-
- if(Color_A[0] > PointA[0] && Color_A[1] > PointA[1] && Color_A[2] > PointA[2] && !compA)//白
- {
- invationA ^= 1;//start false,over true
- compA = true;//on true,noon false
- }
- else if(!(Color_A[0] > PointA[0] && Color_A[1] > PointA[1] && Color_A[2] > PointA[2]))compA = false;//茶
-
- if(Color_B[0] > PointB[0] && Color_B[1] > PointB[1] && Color_B[2] > PointB[2] && !compB)//白
- {
- invationB ^= 1;//start false,over true
- compB = true;//on true,noon false
- }
- else if(!(Color_B[0] > PointB[0] && Color_B[1] > PointB[1] && Color_B[2] > PointB[2]))compB = false;//茶
-
- if(Color_C[0] > PointC[0] && Color_C[1] > PointC[1] && Color_C[2] > PointC[2] && !compC)//白
- {
- invationC ^= 1;//start false,over true
- compC = true;//on true,noon false
- }
- else if(!(Color_C[0] > PointC[0] && Color_C[1] > PointC[1] && Color_C[2] > PointC[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;//茶
- */
-}
-
-void getcolor(){
- for(int i=0;i<10;i++){
- ColorDetection();
-
- Avecolor_A[0] += Color_A[0];
- Avecolor_A[1] += Color_A[1];
- Avecolor_A[2] += Color_A[2];
- Avecolor_B[0] += Color_B[0];
- Avecolor_B[1] += Color_B[1];
- Avecolor_B[2] += Color_B[2];
- Avecolor_C[0] += Color_C[0];
- Avecolor_C[1] += Color_C[1];
- Avecolor_C[2] += Color_C[2];
- Avecolor_D[0] += Color_D[0];
- Avecolor_D[1] += Color_D[1];
- Avecolor_D[2] += Color_D[2];
-}
-
-Avecolor_A[0] = Avecolor_A[0]/10;
-Avecolor_A[1] = Avecolor_A[1]/10;
-Avecolor_A[2] = Avecolor_A[2]/10;
-Avecolor_B[0] = Avecolor_B[0]/10;
-Avecolor_B[1] = Avecolor_B[1]/10;
-Avecolor_B[2] = Avecolor_B[2]/10;
-Avecolor_C[0] = Avecolor_C[0]/10;
-Avecolor_C[1] = Avecolor_C[1]/10;
-Avecolor_C[2] = Avecolor_C[2]/10;
-Avecolor_D[0] = Avecolor_D[0]/10;
-Avecolor_D[1] = Avecolor_D[1]/10;
-Avecolor_D[2] = Avecolor_D[2]/10;
-
-}
-
-void BuzzerTimer_func() {
- if(buzzer == 0.5){
- buzzer = 0;
- }
- else if(buzzer == 0){
- buzzer = 0.5;
- }
+void BuzzerTimer_func(){
+ buzzer = !buzzer;
}
void TapeLedEms_func() {
- sendLedData.code = sendLedData.code == (uint32_t)Red ? (uint32_t)Black : (uint32_t)Red;
+ sendLedData.code = sendLedData.code == (uint32_t)Red ? (uint32_t)Black : (uint32_t)Red;
}
+
+#pragma region USER-DEFINED-FUNCTIONS
+
+
#pragma endregion