にいむら にいむら
/
NRPmainprogram2019
aa
Diff: System/Process/Process.cpp
- Revision:
- 1:e1e9671724e7
- Parent:
- 0:2e7a61458dc3
diff -r 2e7a61458dc3 -r e1e9671724e7 System/Process/Process.cpp --- a/System/Process/Process.cpp Mon Jan 28 08:34:36 2019 +0000 +++ b/System/Process/Process.cpp Sat Jan 25 02:55:50 2020 +0000 @@ -1,65 +1,360 @@ #include "Process.h" - #include "mbed.h" #include "../../Communication/XBee/XBee.h" #include "../../Input/Switch/Switch.h" #include "../../Output/Motor/Motor.h" -/*---------- DEFINE ----------*/ +//_____________________ +/*---------------- HOW TO WRITE ----------------/ + + ・motor の割り当てを決める + #define TIRE_L 1 + + ・リミットスイッチの割り当てを決める + #define ARM_L 1 + + ・他にも自由に定義してもいいです (pwmとか) + +/---------------- HOW TO WRITE ----------------*/ +//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ + +#define a 0 +#define b 1 +#define c 2 +#define d 3 +#define e 4 +#define ARMlim 0 +#define lim 1 + + +int Air0=0; +int Air1=1; +int homes=0; + + -/*----------------------------*/ +//////////////////関数、タイマーの宣言/////////////// +DigitalOut Air[]= { + DigitalOut(A5), + DigitalOut(A4), +}; +Timer Airtime; +Timer home; +void AirOut(int pin,int mode) +{ + Air[pin]=mode; +} +//////////// +float s=Airtime.read();//エアータイム + +int a_array[15][15] = { + {-80, -70, -60, -50, -40, -20, -10, 0, 10, 20, 40, 50, 60, 70, 80}, + {-79, -69, -55, -47, -35, -20, -10, 0, 10, 20, 35, 47, 55, 69, 79}, + {-77, -68, -50, -45, -30, -20, -10, 0, 10, 20, 30, 45, 50, 68, 77}, + {-75, -67, -49, -40, -25, -20, -10, 0, 10, 20, 25, 40, 49, 67, 75}, + {-73, -66, -48, -37, -20, -20, -10, 0, 10, 20, 20, 37, 48, 66, 73}, + {-71, -62, -46, -32, -20, -10, 0, 0, 0, 10, 20, 32, 46, 62, 71}, + {-70, -60, -45, -30, -20, -10, 0, 0, 0, 10, 20, 30, 45, 60, 70}, + {-71, -62, -46, -32, 10, -10, 0, 0, 0, 10, 20, 32, 46, 62, 71}, + {-72, -64, -47, -35, 20, -10, -10, 0, 10, 10, 20, 35, 47, 64, 72}, + {-73, -66, -48, -37, -20, -20, -10, 0, 10, 20, 20, 37, 48, 66, 73}, + {-75, -67, -49, -40, 40, -20, -10, 0, 10, 20, 25, 40, 49, 67, 75}, + {-77, -68, -50, -45, 60, -20, -10, 0, 10, 20, 30, 45, 50, 68, 77}, + {-79, -69, -55, -47, 70, -20, -10, 0, 10, 20, 35, 47, 55, 69, 79}, + {-80, -70, -60, -50, -40, -20, -10, 0, 10, 20, 40, 50, 60, 70, 80}, + {-80, -70, -60, -50, -40, -20,s-10, 0, 10, 20, 40, 50, 60, 70, 80} +}; -// #define USE_USB_SERIAL +int b_array[15][15] = { + {80, 80, 80, 77, 75, 72, 71, 70, 60, 50, 40, 30, 20, 10, 0}, + {80, 80, 75, 70, 65, 60, 55, 50, 45, 40, 30, 20, 10, 0, -10}, + {80, 71, 70, 60, 55, 50, 45, 40, 35, 30, 20, 10, 0, -10, -13}, + {60, 60, 57, 50, 45, 40, 35, 30, 25, 20, 10, 0, -10, -13, -17}, + {50, 50, 50, 40, 35, 30, 23, 20, 15, 10, 0, -10, -15, -17, -20}, + {45, 45, 43, 35, 30, 25, 10, 10, 10, 0, -10, -15, -20, -20, -25}, + {40, 37, 35, 30, 25, 20, 0, 0, 0, -10, -15, -20, -25, -25, -30}, + {35, 30, 30, 25, 20, 15, 0, 0, 0, -15, -20, -25, -30, -30, -35}, + {30, 25, 25, 20, 15, 10, 0, 0, 0, -20, -25, -30, -35, -37, -40}, + {20, 17, 15, 10, 0, -10, -15,-20, -23, -30,-35,-40,-50,-50, -50}, + {17, 13, 10, 0, -10, -20, -25,-30, -35, -40,-45,-50,-57,-60, -60}, + {13, 10, 0, -10, -20, -30, -35,-40, -45, -50,-55,-60, -70, -71, -80}, + {10, 0, -10, -20, -30, -40, -45,-50, -55, -60,-65,-70,-75,-80, -80}, + {0, -10, -20, -30, -40, -50, -60,-70, -71, -72,-75,-77,-80,-80, -80}, + {0, -10, -20, -30, -40, -50, -60,-70, -71, -72,-75,-77,-80,-80, -80} +}; + +int c_array[15][15] = { + {0, 10, 20, 30, 40, 50, 60,70, 71, 72, 75, 77, 80, 80, 80}, + {-10, 0, 10, 20, 30, 40, 45,50, 55, 60,65,70,75,80,80}, + {-13, -10, 0, 10, 20, 30, 35,40, 45, 50,55,60,70,71,80}, + {-17, -13, -10, 0, 10, 20, 25,30, 35, 40,45,50,57,60,60}, + {-20, -17, -15, -10, 0, 10, 15,20, 23, 30,35,40,50,50,50}, + {-25, -20, -20, -15, -10, 0, 10,10, 10, 25,30,35,43,45,45}, + {-30, -25, -25, -20, -15, -10, 0,0, 0, 20,25,30,35,37,40}, + {-35, -30, -30, -25, -20, -15, 0,0, 0, 15,20,25,30,30,35}, + {-40, -37, -35, -30, -25, -20, 0,0, 0, 10,15,20,25,25,30}, + {-50, -50, -50, -40, -35, -30, -23,-20, -15, -10,0,10,15,17,20}, + {-60, -60, -57, -50, -45, -40, -35,-30, -25, -20,-10,0,10,13,17}, + {-80, -71, -70, -60, -55, -50, -45,-40, -35, -30,-20,-10,0,10,13}, + {-80, -80, -75, -70, -65, -60, -55,-50, -45, -40,-30,-20,-10,0,10}, + {-80, -80, -80, -77, -75, -72, -71,-70, -60, -50,-40,-30,-20,-10,0}, + {-80, -80, -80, -77, -75, -72, -71,-70, -60, -50,-40,-30,-20,-10,0} +}; + + + + + + +#define usiro 0 +#define mae 0 +uint8_t motorData[5]; +uint8_t pwmData[5]; + +int conlx; +int conly; +int conrx; +int conry; + +int mode=1; + +//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ +//_____________________ + +//#define USE_USB_SERIAL #ifdef USE_USB_SERIAL -Serial pc(SERIAL_TX,SERIAL_RX); +Serial pc(SERIAL_TX, SERIAL_RX); #endif - XBEE::ControllerData *controller; MOTOR::MotorStatus motor[MOUNTING_MOTOR_NUM]; using namespace SWITCH; -void SystemProcess(void){ - while(true){ +void SystemProcess(void) +{ + while(true) { controller = XBEE::Controller::GetData(); - -/*------------------- how to write ------------------/ +//____________________________ + /*------------------------ HOW TO WRITE ------------------------/ + + ここにメインのプログラムを書く + + ・コントローラから受け取ったデータをもとに動作のプログラムを書く + (コントローラのデータは controller-> で取る) + + if(controller->Button.RIGHT) { + motor[TIRE_L].dir = FOR; + motor[TIRE_R].dir = BACK; + motor[TIRE_L].pwm = 12.3; + motor[TIRE_R].pwm = 12.3; + } + + motor[0].dirは FOR (正転) + BACK (逆転) + BRAKE (ブレーキ) + FREE (フリー) + + motor[0].pwmは 0.0(%) ~ 100.0(%) + + controllerは XBee.hの構造体の中身 + + (AnalogL・Rを使いたかったら、頑張って考える or 聞いてください) + + ・リミットスイッチの値をもとに動作のプログラムを書く + + if(Switch::CheckPushed(ARM_L)) + { + if(controller->Button.L) + { + motor[ARM].dir = FOR; + motor[ARM].pwm = 80.0; + } + if(motor[ARM].dir == BACK) + { + motor[ARM].dir = BRAKE; + } + } + + →関数 Switch::CheckPushed の引数はリミットスイッチの名前 (limitSw[0]みたいな), 返り値はbool型 (true or false) + + ・他にもやりたいことがあったら自由にどうぞ -ここにメインプログラムを書く + ps.わからないことがあったら聞いてください + + /------------------------ HOW TO WRITE ------------------------*/ +//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ + + conlx = controller->AnalogL.X; + conly = controller->AnalogL.Y; + conrx = controller->AnalogR.X; + conry = controller->AnalogR.Y; +//conba = controller->Button.A; +//conbb = controller->Button.B; +//conby = controller->Button.Y; +//conbx = controller->Button.X; + + if(a_array[conly][conlx]<0) { + motor[a].pwm = (-1*a_array[conly][conlx]*100)/80; + motor[a].dir = FOR; + } else if(a_array[conly][conlx] > 0) { + motor[a].pwm = (a_array[conly][conlx]*100)/80; + motor[a].dir = BACK; + } else if(a_array[conly][conlx] == 0) { + if(conry < 6) { + motor[a].dir = BACK; + motor[b].dir = BACK; + motor[c].dir = BACK; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } else if(conry > 8) { + motor[a].dir = FOR; + motor[b].dir = FOR; + motor[c].dir = FOR; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } else { + motor[a].dir = BRAKE; + motor[b].dir = BRAKE; + motor[c].dir = BRAKE; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } + } -・コントローラーから受けっ取ったデータをもとに動作のプログラムを書く - (コントローラーのデータは controller-> で取る - - if(controller->Button.RIGHT){ - motor[TIRE_L].dir = FOR; - motor[TIRE_R].dir = BACK; - motor[TIRE_L].pwm = 12.3; - motor[TIRE_R].pwm = 12.3; - } - - motor[0].dirは FOR (正転) - BACK (逆転) - FREE (ブレーキ) - BRAKE (フリー) - - motor[0].pwmは 0.0(%) ~ 100.0(%) - - controllerは XBee.hの構造体の中身 - -・リミットスイッチの値をもとに動作のプログラムを書く + if(b_array[conly][conlx] <0 ) { + motor[b].pwm = (-1*b_array[conly][conlx]*100)/80; + motor[b].dir = FOR; + } else if(b_array[conly][conlx] > 0) { + motor[b].pwm = (b_array[conly][conlx]*100)/80; + motor[b].dir = BACK; + } else if(a_array[conly][conlx] == 0 ) { + if(conrx < 6 ) { + motor[a].dir = BACK; + motor[b].dir = BACK; + motor[c].dir = BACK; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } else if(conrx > 8) { + motor[a].dir = FOR; + motor[b].dir = FOR; + motor[c].dir = FOR; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } else { + motor[a].dir = BRAKE; + motor[b].dir = BRAKE; + motor[c].dir = BRAKE; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } + } + + if(c_array[conly][conlx] <0 ) { + motor[c].pwm =(-1*c_array[conly][conlx]*100)/80; + motor[c].dir = BACK; + } else if(c_array[conly][conlx] > 0) { + motor[c].pwm =(c_array[conly][conlx]*100)/80; + motor[c].dir = FOR; + } else if(a_array[conly][conlx] == 0 ) { + if(conrx < 6 ) { + motor[a].dir = BACK; + motor[b].dir = BACK; + motor[c].dir = BACK; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } else if(conrx > 8) { + motor[a].dir = FOR; + motor[b].dir = FOR; + motor[c].dir = FOR; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } else { + motor[a].dir = BRAKE; + motor[b].dir = BRAKE; + motor[c].dir = BRAKE; + motor[a].pwm = 100.0; + motor[b].pwm = 100.0; + motor[c].pwm = 100.0; + } + } - if(Switch::CheckPushed(ARM_L)){ - - } - - 関数 Switch::CheckPushed の引数はリミットスイッチの名前 , 返り値はbool型(true or false) - -ここより下に書いて --------------------*/ +////////////課題1//////////// + if(controller->Button.X) { + if(Switch::CheckPushed(ARMlim)) { + motor[d].dir = BRAKE; + motor[d].pwm = 100; + } else { + motor[d].dir = FOR; + motor[d].pwm = 100; + } + } else if(controller->Button.Y) { + motor[d].dir = BACK; + motor[d].pwm = 100; + } else { + motor[d].dir = BRAKE; + motor[d].pwm = 100; + } + if(controller->Button.A) { + AirOut(Air0,1); + } else if(controller->Button.B) { + AirOut(Air0,0); + } +//////////////課題2///////////////////// + s=Airtime.read(); + if((controller->Button.ZL)&&(mode==1)) { + mode=2; + Airtime.start(); + } + if((mode==2)&&(s>=1)) { + mode=3; + } + if((mode==3)&&(s>=3)) { + mode=4; + } + if((mode==4)&&(!(Switch::CheckPushed(lim)))) { + mode=5; + Airtime.stop(); + Airtime.reset(); + } + if((mode==5)&&(Switch::CheckPushed(lim))) { + mode=1; + } + + if(mode==1) { + AirOut(1,1); + motor[4].dir=BRAKE; + motor[4].pwm=100; + } else if(mode==2) { + AirOut(1,0); + } else if(mode==3) { + AirOut(1,1); + } else if(mode==4) { + motor[4].dir=FOR; + motor[4].pwm=50; + } else if(mode==5) { + motor[4].dir=FOR; + motor[4].pwm=50; + } else { + mode=1; + AirOut(1,1); + } + if(controller->Button.L) { + motor[4].dir=FOR; + motor[4].pwm=10; + } +//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ +//___________________________ - + MOTOR::Motor::Update(motor); } -} - \ No newline at end of file +} \ No newline at end of file