2022_gorobo_Ateam / Mbed 2 deprecated beenbag_shoot_highspeed

Dependencies:   mbed MOTOR

Committer:
gennnisi
Date:
Sun Mar 06 06:34:20 2022 +0000
Revision:
22:97328720703c
Parent:
21:9f917ee199ff
Child:
23:a162feaea9ab
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gennnisi 21:9f917ee199ff 1 #include "mbed.h"
gennnisi 0:0128d59ac729 2 #include "rotary_inc.hpp"
gennnisi 0:0128d59ac729 3 #include "scrp_slave.hpp"
gennnisi 0:0128d59ac729 4 #include "Motor.hpp"
gennnisi 0:0128d59ac729 5
gennnisi 19:fbb3b5331641 6 //-----インスタンス--------------------------
gennnisi 19:fbb3b5331641 7
gennnisi 22:97328720703c 8 Motor motor_revolver(PA_8,PA_7);//リボルバーモーター
gennnisi 20:4db5f042a45c 9 Motor motor_shoot(PA_1,PA_3);//発射機構モーター
gennnisi 20:4db5f042a45c 10 PwmOut servo(PB_6);//ロック解除用サーボ
gennnisi 9:6008a52fb6ef 11
gennnisi 18:c61ba21bbc67 12 ScrpSlave slave(PA_9,PA_10,PA_12,SERIAL_TX,SERIAL_RX,3);//id=3
gennnisi 0:0128d59ac729 13
gennnisi 18:c61ba21bbc67 14 RotaryInc v(PA_0,PA_4,1,1024,2);//リボルバーロリコン
gennnisi 0:0128d59ac729 15
gennnisi 18:c61ba21bbc67 16 DigitalIn limit_1(PB_0);//リミットスイッチ1
gennnisi 18:c61ba21bbc67 17 DigitalIn limit_2(PB_1);//リミットスイッチ2
gennnisi 6:7dcc827bbe96 18
gennnisi 19:fbb3b5331641 19 //-----変数---------------------------------
gennnisi 19:fbb3b5331641 20
gennnisi 17:9ee4c69d2d8b 21 int shoot_phase = 0;//発射フェーズ 0:待機 1:装填動作 2:リボルバー回転、モーター復帰(同時) 3:発射 
gennnisi 18:c61ba21bbc67 22 bool turn_able = 0;//回転可否
gennnisi 18:c61ba21bbc67 23 bool back_able = 0;//復帰可否 
gennnisi 0:0128d59ac729 24
gennnisi 22:97328720703c 25 bool shoot_start = 0;//発射開始 0:待機 1:開始済み
gennnisi 19:fbb3b5331641 26 bool emergency = 0;//0:停止 1:停止
gennnisi 20:4db5f042a45c 27 double revolver_pwm = -0.1;//リボルバー回転速度
gennnisi 20:4db5f042a45c 28 double load_pwm = -0.5;//装填モーター速度
gennnisi 20:4db5f042a45c 29 double back_pwm = 0.5;//復帰モーター速度
gennnisi 9:6008a52fb6ef 30
gennnisi 12:aef2a6626ea5 31 int theta_0 = 1290;//0度
gennnisi 12:aef2a6626ea5 32 int theta_45 = 1875;//45度
gennnisi 9:6008a52fb6ef 33 int roricon = 0;//ロリコン
gennnisi 0:0128d59ac729 34
gennnisi 19:fbb3b5331641 35 //-----関数---------------------------------
gennnisi 19:fbb3b5331641 36
gennnisi 22:97328720703c 37 //発射開始を受信
gennnisi 22:97328720703c 38 bool get_shoot(int rx_data,int &tx_data){
gennnisi 22:97328720703c 39 if(shoot_phase == 0 && shoot_start == 0){//フェーズ0以外は、発射できないように
gennnisi 22:97328720703c 40 shoot_start = 1;
gennnisi 18:c61ba21bbc67 41 shoot_phase = 1;
gennnisi 0:0128d59ac729 42 }
gennnisi 0:0128d59ac729 43 return true;
gennnisi 0:0128d59ac729 44 }
gennnisi 0:0128d59ac729 45
gennnisi 19:fbb3b5331641 46 //非常停止を受信
gennnisi 19:fbb3b5331641 47 bool get_stop(int rx_data,int &tx_data){
gennnisi 19:fbb3b5331641 48 if(emergency == 0){
gennnisi 19:fbb3b5331641 49 emergency = 1;//停止
gennnisi 20:4db5f042a45c 50 shoot_phase = 10;
gennnisi 19:fbb3b5331641 51 }
gennnisi 22:97328720703c 52 return true;
gennnisi 19:fbb3b5331641 53 }
gennnisi 19:fbb3b5331641 54
gennnisi 19:fbb3b5331641 55 //リボルバー、ラック復帰
gennnisi 13:66e37e0aa786 56 void revolver_back(int count){
gennnisi 16:04f42eeb9561 57 while(turn_able == 1 || back_able == 1){
gennnisi 16:04f42eeb9561 58 //リボルバー
gennnisi 16:04f42eeb9561 59 if(count == 1){
gennnisi 16:04f42eeb9561 60 motor_revolver.output(0);
gennnisi 16:04f42eeb9561 61 turn_able = 0;
gennnisi 17:9ee4c69d2d8b 62 printf("no turn\n");
gennnisi 16:04f42eeb9561 63 }
gennnisi 18:c61ba21bbc67 64 if(count > 1){
gennnisi 16:04f42eeb9561 65 if(roricon < 341 * (count - 1)){
gennnisi 16:04f42eeb9561 66 if(turn_able == 1){
gennnisi 14:81f09ab5ed23 67 roricon = v.get();
gennnisi 14:81f09ab5ed23 68 motor_revolver.output(revolver_pwm);
gennnisi 16:04f42eeb9561 69 printf("roricon = %d\n",roricon);
gennnisi 14:81f09ab5ed23 70 }
gennnisi 13:66e37e0aa786 71 }
gennnisi 16:04f42eeb9561 72 else{
gennnisi 16:04f42eeb9561 73 motor_revolver.output(0);
gennnisi 16:04f42eeb9561 74 turn_able = 0;
gennnisi 16:04f42eeb9561 75 }
gennnisi 16:04f42eeb9561 76 }
gennnisi 16:04f42eeb9561 77 //復帰
gennnisi 16:04f42eeb9561 78 if(limit_2.read() == 0){
gennnisi 16:04f42eeb9561 79 if(back_able == 1){
gennnisi 13:66e37e0aa786 80 motor_shoot.output(back_pwm);
gennnisi 16:04f42eeb9561 81 printf("backing\n");
gennnisi 13:66e37e0aa786 82 }
gennnisi 16:04f42eeb9561 83 }
gennnisi 16:04f42eeb9561 84 if(limit_2.read() == 1){
gennnisi 16:04f42eeb9561 85 motor_shoot.output(0);
gennnisi 16:04f42eeb9561 86 back_able = 0;
gennnisi 16:04f42eeb9561 87 printf("finished backing\n");
gennnisi 9:6008a52fb6ef 88 }
gennnisi 16:04f42eeb9561 89 //ループ抜け出し
gennnisi 18:c61ba21bbc67 90 if(turn_able == 0 && back_able == 0){
gennnisi 16:04f42eeb9561 91 break;
gennnisi 16:04f42eeb9561 92 }
gennnisi 20:4db5f042a45c 93 wait(0.01);
gennnisi 9:6008a52fb6ef 94 }
gennnisi 9:6008a52fb6ef 95 }
gennnisi 9:6008a52fb6ef 96
gennnisi 19:fbb3b5331641 97 //------------------------------------------
gennnisi 19:fbb3b5331641 98
gennnisi 9:6008a52fb6ef 99 int main(){
gennnisi 9:6008a52fb6ef 100 int count = 1;//何発目か
gennnisi 9:6008a52fb6ef 101
gennnisi 9:6008a52fb6ef 102 servo.period_us(20000);
gennnisi 10:5e3c789e07dc 103 limit_1.mode(PullUp);
gennnisi 10:5e3c789e07dc 104 limit_2.mode(PullUp);
gennnisi 9:6008a52fb6ef 105
gennnisi 22:97328720703c 106 slave.addCMD(2,get_shoot);
gennnisi 20:4db5f042a45c 107 slave.addCMD(51,get_stop);
gennnisi 12:aef2a6626ea5 108
gennnisi 9:6008a52fb6ef 109 while(1){
gennnisi 21:9f917ee199ff 110 //----------自動発射------------------------------
gennnisi 22:97328720703c 111 switch (shoot_phase){
gennnisi 22:97328720703c 112 case 0://待機
gennnisi 19:fbb3b5331641 113 while(shoot_phase == 0){
gennnisi 19:fbb3b5331641 114 wait(0.1);
gennnisi 19:fbb3b5331641 115 printf("waiting\n");
gennnisi 15:7c26b01dcefd 116 }
gennnisi 22:97328720703c 117 if(count < 7){
gennnisi 22:97328720703c 118 shoot_phase = 1;
gennnisi 22:97328720703c 119 }else{
gennnisi 22:97328720703c 120 emergency = 1;
gennnisi 22:97328720703c 121 shoot_phase = 10;
gennnisi 22:97328720703c 122 }
gennnisi 19:fbb3b5331641 123 printf("finished waiting\n");
gennnisi 22:97328720703c 124 break;
gennnisi 19:fbb3b5331641 125
gennnisi 22:97328720703c 126 case 1://装填動作
gennnisi 19:fbb3b5331641 127 while(limit_1.read() == 0){
gennnisi 19:fbb3b5331641 128 motor_shoot.output(load_pwm);
gennnisi 19:fbb3b5331641 129 printf("loading\n");
gennnisi 19:fbb3b5331641 130 if(limit_2.read() == 1){
gennnisi 19:fbb3b5331641 131 break;
gennnisi 19:fbb3b5331641 132 }
gennnisi 19:fbb3b5331641 133 wait(0.1);
gennnisi 19:fbb3b5331641 134 }
gennnisi 19:fbb3b5331641 135 motor_shoot.output(0);
gennnisi 19:fbb3b5331641 136 shoot_phase = 2;
gennnisi 19:fbb3b5331641 137 printf("finished loading\n");
gennnisi 22:97328720703c 138 wait(0.1);
gennnisi 22:97328720703c 139 break;
gennnisi 19:fbb3b5331641 140
gennnisi 22:97328720703c 141 case 2://リボルバー回転,モーター復帰
gennnisi 19:fbb3b5331641 142 turn_able = 1;
gennnisi 19:fbb3b5331641 143 back_able = 1;
gennnisi 19:fbb3b5331641 144 revolver_back(count);
gennnisi 19:fbb3b5331641 145 shoot_phase = 3;
gennnisi 19:fbb3b5331641 146 printf("finished backing\n");
gennnisi 22:97328720703c 147 wait(0.5);
gennnisi 22:97328720703c 148 break;
gennnisi 19:fbb3b5331641 149
gennnisi 22:97328720703c 150 case 3://発射動作
gennnisi 19:fbb3b5331641 151 servo.pulsewidth_us(theta_45);
gennnisi 19:fbb3b5331641 152 printf("%d shot\n",count);
gennnisi 22:97328720703c 153 wait(1);
gennnisi 20:4db5f042a45c 154 servo.pulsewidth_us(theta_0);
gennnisi 19:fbb3b5331641 155 motor_shoot.output(load_pwm);
gennnisi 19:fbb3b5331641 156 wait(0.15);
gennnisi 19:fbb3b5331641 157 motor_shoot.output(0);
gennnisi 19:fbb3b5331641 158 shoot_phase = 0;
gennnisi 19:fbb3b5331641 159 printf("finished init\n");
gennnisi 19:fbb3b5331641 160 count ++;
gennnisi 22:97328720703c 161 break;
gennnisi 19:fbb3b5331641 162
gennnisi 22:97328720703c 163 case 10://非常停止
gennnisi 19:fbb3b5331641 164 while(emergency == 1){
gennnisi 19:fbb3b5331641 165 motor_shoot.output(0);
gennnisi 19:fbb3b5331641 166 motor_revolver.output(0);
gennnisi 20:4db5f042a45c 167 printf("emergency\n");
gennnisi 19:fbb3b5331641 168 wait(0.1);
gennnisi 19:fbb3b5331641 169 }
gennnisi 22:97328720703c 170 break;
gennnisi 22:97328720703c 171 }
gennnisi 9:6008a52fb6ef 172 }
gennnisi 12:aef2a6626ea5 173 }