Dead by Daylight

Dependencies:   mbed Servo

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Process.cpp Source File

Process.cpp

00001 //2018/02/24のやつ
00002 
00003 #include "Process.h"
00004 
00005 #include "mbed.h"
00006 #include "../../Communication/XBee/XBee.h"
00007 #include "../../Input/Switch/Switch.h"
00008 #include "../../Output/Motor/Motor.h"
00009 #include "../../Output/Servo/Servo.h"
00010 
00011 //_____________________
00012 /*---------------- HOW TO WRITE ----------------/
00013 
00014     ・motor の割り当てを決める
00015         #define TIRE_L 1
00016 
00017     ・リミットスイッチの割り当てを決める
00018         #define 0_L 1
00019 
00020     ・他にも自由に定義してもいいです (pwmとか)
00021 
00022 /---------------- HOW TO WRITE ----------------*/
00023 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00024 
00025 #define TIRE_LF 0
00026 #define TIRE_LB 1
00027 #define TIRE_RB 2
00028 #define TIRE_RF 3
00029 #define ARM_M   4
00030 
00031 #define Air1_pin A7
00032 #define Air2_pin A6
00033 #define Air3_pin A5
00034 #define ARM_T 0
00035 
00036 const int omni[15][15]=
00037 {
00038     {   0,     2,      6,     15,     26,     41,     59,     80,     80,     80,     80,     80,    80,    80,    80},
00039     {  -2,     0,      2,      6,     15,     26,     41,     59,     61,     65,     73,     80,    80,    80,    80},
00040     {  -6,    -2,      0,      2,      6,     15,     26,     41,     43,     47,     56,     67,    80,    80,    80},
00041     { -15,    -6,     -2,      0,      2,      6,     15,     26,     28,     33,     41,     52,    67,    80,    80},
00042     { -26,   -15,     -6,     -2,      0,      2,      6,     15,     17,     21,     29,     41,    56,    73,    80},
00043     { -41,   -26,    -15,     -6,     -2,      0,      2,      6,      8,     13,     21,     33,    48,    65,    80},
00044     { -59,   -41,    -26,    -15,     -6,     -2,      0,      2,      4,      8,     16,     28,    42,    61,    80},
00045     { -80,   -59,    -41,    -26,    -15,     -6,     -2,      0,      2,      6,     15,     26,    41,    59,    80},
00046     { -80,   -61,    -42,    -28,    -16,     -8,     -4,     -2,      0,      2,      6,     15,    26,    41,    59},
00047     { -80,   -65,    -48,    -33,    -21,    -13,     -8,     -6,     -2,      0,      2,      6,    15,    26,    41},
00048     { -80,   -73,    -56,    -41,    -29,    -21,    -17,    -15,     -6,     -2,      0,      2,     6,    15,    26},
00049     { -80,   -80,    -67,    -52,    -41,    -33,    -28,    -26,    -15,     -6,     -2,      0,     2,     6,    15},
00050     { -80,   -80,    -80,    -67,    -56,    -47,    -43,    -41,    -26,    -15,     -6,     -2,     0,     2,     6},
00051     { -80,   -80,    -80,    -80,    -73,    -65,    -61,    -59,    -41,    -26,    -15,     -6,    -2,     0,     2},
00052     { -80,   -80,    -80,    -80,    -80,    -80,    -80,    -80,    -59,    -41,    -26,    -15,    -6,    -2,     0}
00053 };
00054 
00055 const int curve[15] = {-64, -47, -33, -21, -12, -5, -1, 0, 1, 5, 12, 21, 33, 47, 64};
00056 
00057 
00058 
00059 uint8_t SetStatus(int);
00060 uint8_t SetStatus(int pwmVal){
00061     if(pwmVal < 0) return BACK;
00062     else if(pwmVal > 0) return FOR;
00063     else if(pwmVal == 0) return BRAKE;
00064 }
00065 uint8_t SetPWM(int);
00066 uint8_t SetPWM(int pwmVal){
00067     if(pwmVal == 0 || pwmVal >  80 || pwmVal < -80) return 80;
00068     else return abs(pwmVal);
00069 }
00070 
00071 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
00072 //_____________________
00073 
00074 //#define USE_USB_SERIAL
00075 #ifdef USE_USB_SERIAL
00076 Serial pc(SERIAL_TX, SERIAL_RX);
00077 #endif
00078 XBEE::ControllerData *controller;
00079 MOTOR::MotorStatus motor[MOUNTING_MOTOR_NUM];
00080 
00081 
00082 
00083 using namespace SWITCH;
00084 /////////////////////////////////
00085 DigitalOut AirPin[] = {
00086     DigitalOut(Air1_pin),
00087     DigitalOut(Air2_pin),
00088     DigitalOut(Air3_pin),
00089 };
00090 
00091 void AirOut(int pin,int mode){
00092     if(mode==1){
00093         AirPin[pin]=1;
00094     }else if(mode==0){
00095         AirPin[pin]=0;
00096     }else{
00097         AirPin[pin]=0;    
00098     }
00099 }
00100 //////////////////////////////////
00101 void SystemProcess(void) {  
00102     while(true) {
00103         controller = XBEE::Controller::GetData();
00104 //____________________________
00105 /*------------------------ HOW TO WRITE ------------------------/
00106 
00107     ここにメインのプログラムを書く
00108 
00109     ・コントローラから受け取ったデータをもとに動作のプログラムを書く
00110      (コントローラのデータは controller-> で取る)
00111 
00112         if(controller->Button.RIGHT) {
00113             motor[TIRE_L].dir = FOR;
00114             motor[TIRE_R].dir = BACK;
00115             motor[TIRE_L].pwm = 12.3;
00116             motor[TIRE_R].pwm = 12.3;
00117         }
00118 
00119      motor[0].dirは     FOR   (正転)
00120                         BACK  (逆転)
00121                         BRAKE (ブレーキ)
00122                         FREE  (フリー)
00123 
00124      motor[0].pwmは     0.0(%) ~ 100.0(%)
00125 
00126      controllerは       XBee.hの構造体の中身
00127 
00128      (AnalogL・Rを使いたかったら、頑張って考える or 聞いてください)
00129 
00130     ・リミットスイッチの値をもとに動作のプログラムを書く
00131 
00132         if(Switch::CheckPushed(0_L))
00133         {
00134             if(controller->Button.L)
00135             {
00136                 motor[0].dir = FOR;
00137                 motor[0].pwm = 80.0;
00138             }
00139             if(motor[0].dir == BACK)
00140             {
00141                 motor[0].dir = BRAKE;
00142             }
00143         }
00144 
00145      →関数 Switch::CheckPushed の引数はリミットスイッチの名前 (limitSw[0]みたいな), 返り値はbool型 (true or false)
00146 
00147     ・他にもやりたいことがあったら自由にどうぞ
00148 
00149     ps.わからないことがあったら聞いてください
00150 
00151 /------------------------ HOW TO WRITE ------------------------*/
00152 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00153     
00154     
00155     if(controller->AnalogL.X >= 6 && controller->AnalogL.X <= 8 && controller->AnalogL.Y >= 6 && controller->AnalogL.Y <= 8){
00156           motor[TIRE_LF].dir = FREE;
00157           motor[TIRE_LB].dir = FREE;
00158           motor[TIRE_RB].dir = FREE;
00159           motor[TIRE_RF].dir = FREE;
00160     }
00161     
00162     if(controller->AnalogR.X >= 6 && controller->AnalogR.X <= 8 && controller->AnalogR.Y >= 6 && controller->AnalogR.Y <= 8){
00163           motor[TIRE_LF].dir = FREE;
00164           motor[TIRE_LB].dir = FREE;
00165           motor[TIRE_RB].dir = FREE;
00166           motor[TIRE_RF].dir = FREE;
00167     }
00168     
00169     motor[TIRE_RF].dir = SetStatus(-omni[controller->AnalogL.Y][14-controller->AnalogL.X]     + curve[controller->AnalogR.X]);
00170     motor[TIRE_LF].dir = SetStatus(omni[controller->AnalogL.Y][controller->AnalogL.X]         + curve[controller->AnalogR.X]);
00171     motor[TIRE_RB].dir = SetStatus(-omni[14-controller->AnalogL.X][14-controller->AnalogL.Y]  + curve[controller->AnalogR.X]); 
00172     motor[TIRE_LB].dir = SetStatus(omni[controller->AnalogL.X][14-controller->AnalogL.Y]      + curve[controller->AnalogR.X]);
00173          
00174     motor[TIRE_RF].pwm = SetPWM(omni[controller->AnalogL.Y][14-controller->AnalogL.X])    ;
00175     motor[TIRE_LF].pwm = SetPWM(omni[controller->AnalogL.Y][controller->AnalogL.X])       ;
00176     motor[TIRE_RB].pwm = SetPWM(omni[14-controller->AnalogL.X][14-controller->AnalogL.Y]) ;
00177     motor[TIRE_LB].pwm = SetPWM(omni[controller->AnalogL.X][14-controller->AnalogL.Y])    ;
00178     
00179     if(controller->Button.R){
00180         AirOut(0,1);
00181     }
00182     if(controller->Button.L){
00183         AirOut(0,0);
00184     }
00185     
00186     if(controller->Button.A){
00187         AirOut(1,1);
00188     }
00189     if(controller->Button.B){
00190         AirOut(1,0);
00191     }
00192     
00193     if(controller->Button.X){
00194         AirOut(2,1);
00195     }
00196     if(controller->Button.Y){
00197         AirOut(2,0);
00198     }
00199     
00200     if(controller->Button.UP) {
00201         motor[ARM_M].dir = BACK;
00202         motor[ARM_M].pwm = 50;
00203     }
00204     if(controller->Button.DOWN){
00205         motor[ARM_M].dir = FOR;
00206         motor[ARM_M].pwm = 50;
00207     } 
00208     if(Switch::checkPushed(ARM_T)){
00209         motor[ARM_M].dir = BRAKE;
00210     } 
00211     else{
00212         motor[ARM_M].dir = BRAKE;
00213     }        
00214 
00215 
00216 
00217 
00218 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
00219 //____________________________
00220 
00221         MOTOR::Motor::Update(motor);
00222     }
00223 }
00224