椋 高山
/
mainboardnrp2018
Dead by Daylight
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Thu Jul 28 2022 23:31:47 by 1.7.2