program to shoot beenbags

Dependencies:   mbed MOTOR

arrcmbedをインクルードしてください。

Committer:
gennnisi
Date:
Fri Jan 14 14:48:42 2022 +0000
Revision:
5:1433a73c2692
Parent:
4:d71a97acbf01
Child:
6:7dcc827bbe96
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gennnisi 0:0128d59ac729 1 //発射、リボルバープログラム
gennnisi 0:0128d59ac729 2 #include "mbed.h"
gennnisi 0:0128d59ac729 3 #include "rotary_inc.hpp"
gennnisi 0:0128d59ac729 4 #include "scrp_slave.hpp"
gennnisi 0:0128d59ac729 5 #include "Motor.hpp"
gennnisi 0:0128d59ac729 6
gennnisi 0:0128d59ac729 7 //ScrpSlave slave(PA_9,PA_10,PA_12,SERIAL_TX,SERIAL_RX,0x0803f800);//l432kc
gennnisi 0:0128d59ac729 8 ScrpSlave slave(PC_12,PD_2,PH_1,SERIAL_TX,SERIAL_RX,0x0807f800);//f446re
gennnisi 0:0128d59ac729 9
gennnisi 4:d71a97acbf01 10 RotaryInc v(PA_14,PA_15,1,1024,4);
gennnisi 0:0128d59ac729 11
gennnisi 0:0128d59ac729 12 Motor motor_revolver(PB_13,PB_14);//リボルバーモーター
gennnisi 0:0128d59ac729 13 Motor motor_shoot(PA_11,PB_1);//発射機構モーター
gennnisi 0:0128d59ac729 14
gennnisi 0:0128d59ac729 15 int shoot_able;//発射フェーズ 0:待機 1:引き動作 2:リボルバー1/6回転 3:発射 
gennnisi 0:0128d59ac729 16 int turn_able;//回転フェーズ 0:待機 1:1/6回転
gennnisi 0:0128d59ac729 17
gennnisi 0:0128d59ac729 18 double revolver_pwm = 0.1;//リボルバー回転速度
gennnisi 0:0128d59ac729 19 double interval = 0.1;
gennnisi 4:d71a97acbf01 20 int roricon = 0;
gennnisi 0:0128d59ac729 21
gennnisi 0:0128d59ac729 22 bool interrupt(int rx_data,int &tx_data){
gennnisi 0:0128d59ac729 23 if(shoot_able == 0){//フェーズ0以外は、発射できないように
gennnisi 0:0128d59ac729 24 shoot_able = rx_data;//1を受け取って引き動作開始
gennnisi 0:0128d59ac729 25 }
gennnisi 0:0128d59ac729 26 return true;
gennnisi 0:0128d59ac729 27 }
gennnisi 0:0128d59ac729 28
gennnisi 0:0128d59ac729 29 //リボルバーP制御関数
gennnisi 0:0128d59ac729 30 //double k_p = 0.001;
gennnisi 0:0128d59ac729 31 //double target = 171.0;
gennnisi 0:0128d59ac729 32 /*void revolver(int count){
gennnisi 0:0128d59ac729 33 if(turn_able == 1){
gennnisi 0:0128d59ac729 34 roricon = v.get() - (171 * (count - 1));
gennnisi 0:0128d59ac729 35
gennnisi 0:0128d59ac729 36 while(roricon != 171){
gennnisi 0:0128d59ac729 37 pwm = k_p * (target - roricon);
gennnisi 0:0128d59ac729 38 motor_revolver.output(pwm);
gennnisi 0:0128d59ac729 39 printf("roricon = %lf\n",roricon);
gennnisi 0:0128d59ac729 40 printf("pwm = %lf\n",pwm);
gennnisi 0:0128d59ac729 41 wait(interval);
gennnisi 0:0128d59ac729 42 }
gennnisi 0:0128d59ac729 43 motor_revolver.output(0.0);
gennnisi 0:0128d59ac729 44 turn_able = 0;
gennnisi 0:0128d59ac729 45 }
gennnisi 0:0128d59ac729 46 }*/
gennnisi 0:0128d59ac729 47
gennnisi 0:0128d59ac729 48 void revolver(int count){
gennnisi 0:0128d59ac729 49 if(turn_able == 1){
gennnisi 4:d71a97acbf01 50 while(roricon < 171 * count){
gennnisi 4:d71a97acbf01 51 roricon = v.get();
gennnisi 0:0128d59ac729 52 motor_revolver.output(revolver_pwm);
gennnisi 4:d71a97acbf01 53 printf("roricon = %d\n",roricon);
gennnisi 0:0128d59ac729 54 wait(interval);
gennnisi 0:0128d59ac729 55 }
gennnisi 0:0128d59ac729 56 motor_revolver.output(0.0);
gennnisi 0:0128d59ac729 57 turn_able = 0;
gennnisi 0:0128d59ac729 58 }
gennnisi 0:0128d59ac729 59 }
gennnisi 0:0128d59ac729 60
gennnisi 0:0128d59ac729 61 int main(){
gennnisi 0:0128d59ac729 62 int count = 1;//何発目か
gennnisi 0:0128d59ac729 63
gennnisi 0:0128d59ac729 64 slave.addCMD(2,interrupt);
gennnisi 0:0128d59ac729 65 while(1){
gennnisi 0:0128d59ac729 66 switch (shoot_able){
gennnisi 0:0128d59ac729 67 case 0:
gennnisi 0:0128d59ac729 68 //待機
gennnisi 0:0128d59ac729 69 while(shoot_able == 0){
gennnisi 0:0128d59ac729 70 wait(0.1);
gennnisi 0:0128d59ac729 71 printf("waiting\n");
gennnisi 0:0128d59ac729 72 }
gennnisi 4:d71a97acbf01 73 printf("finished waiting\n");
gennnisi 0:0128d59ac729 74 break;
gennnisi 0:0128d59ac729 75
gennnisi 0:0128d59ac729 76 case 1:
gennnisi 0:0128d59ac729 77 //装填動作コードをここに書く!
gennnisi 0:0128d59ac729 78 shoot_able = 2;
gennnisi 4:d71a97acbf01 79 printf("finished pulling\n");
gennnisi 0:0128d59ac729 80 break;
gennnisi 0:0128d59ac729 81
gennnisi 0:0128d59ac729 82 case 2:
gennnisi 0:0128d59ac729 83 //リボルバー回転
gennnisi 0:0128d59ac729 84 turn_able = 1;
gennnisi 0:0128d59ac729 85 revolver(count);
gennnisi 0:0128d59ac729 86 if(turn_able == 0){
gennnisi 0:0128d59ac729 87 shoot_able = 3;
gennnisi 0:0128d59ac729 88 }
gennnisi 4:d71a97acbf01 89 printf("finished turnning\n");
gennnisi 0:0128d59ac729 90 break;
gennnisi 0:0128d59ac729 91
gennnisi 0:0128d59ac729 92 case 3:
gennnisi 0:0128d59ac729 93 //発射動作コードをここに書く!
gennnisi 0:0128d59ac729 94 shoot_able = 0;
gennnisi 4:d71a97acbf01 95 printf("finished shooting %d\n",count);
gennnisi 0:0128d59ac729 96 count ++;
gennnisi 0:0128d59ac729 97 break;
gennnisi 0:0128d59ac729 98 }
gennnisi 0:0128d59ac729 99 }
gennnisi 0:0128d59ac729 100 }