go-roboB
/
ashimawari_aa2_left
left
main.cpp@1:1f9a3449bbb9, 2022-04-08 (annotated)
- Committer:
- darkumatar
- Date:
- Fri Apr 08 09:31:13 2022 +0000
- Revision:
- 1:1f9a3449bbb9
- Parent:
- 0:c60fccf1ea71
o
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
darkumatar | 0:c60fccf1ea71 | 1 | #include "mbed.h" |
darkumatar | 0:c60fccf1ea71 | 2 | #include"scrp_slave.hpp" |
darkumatar | 0:c60fccf1ea71 | 3 | #include "rotary_inc.hpp" |
darkumatar | 0:c60fccf1ea71 | 4 | #include"cmath" |
darkumatar | 0:c60fccf1ea71 | 5 | #include"gy521.hpp" |
darkumatar | 0:c60fccf1ea71 | 6 | #include "neopixel.h" |
darkumatar | 0:c60fccf1ea71 | 7 | |
darkumatar | 0:c60fccf1ea71 | 8 | |
darkumatar | 0:c60fccf1ea71 | 9 | #define goal_x -17700.0 |
darkumatar | 1:1f9a3449bbb9 | 10 | #define goal_y -23800.0//-23800.0 |
darkumatar | 0:c60fccf1ea71 | 11 | #define goal_x2 -8000000 |
darkumatar | 1:1f9a3449bbb9 | 12 | #define goal_y2 -80000000 |
darkumatar | 0:c60fccf1ea71 | 13 | #define period_r 8000.0 |
darkumatar | 0:c60fccf1ea71 | 14 | NeoPixelOut npx(PB_4,7); |
darkumatar | 0:c60fccf1ea71 | 15 | I2C i2d(PB_3,PB_10); |
darkumatar | 0:c60fccf1ea71 | 16 | GY521 gyro(i2d); |
darkumatar | 0:c60fccf1ea71 | 17 | ScrpSlave slave(PC_12,PD_2 ,PH_1 ,SERIAL_TX,SERIAL_RX,0x0807f800);//srcslave設定 |
darkumatar | 0:c60fccf1ea71 | 18 | RotaryInc v[4]{RotaryInc(PC_5,PA_12,1,256,4),RotaryInc(PA_9,PA_8,1,256,4),RotaryInc(PC_3,PC_2,1,256,4),RotaryInc(PC_11,PC_10,1,256,4)};//ロリコンピン |
darkumatar | 0:c60fccf1ea71 | 19 | RotaryInc rote[4]{RotaryInc(PA_15,PA_14,1,256,4),RotaryInc(PA_7,PA_6,1,256,4),RotaryInc(PC_1,PC_0,1,256,4),RotaryInc(PA_13,PC_4,1,256,4)};//読み取り用ピン |
darkumatar | 0:c60fccf1ea71 | 20 | int target[4];//target変数 この変数の値を目指すように動く |
darkumatar | 0:c60fccf1ea71 | 21 | int angler=90; |
darkumatar | 0:c60fccf1ea71 | 22 | int speedr=1024; |
darkumatar | 0:c60fccf1ea71 | 23 | bool auto_swich = false; |
darkumatar | 0:c60fccf1ea71 | 24 | bool limit_switch = true; |
darkumatar | 0:c60fccf1ea71 | 25 | int step=0; |
darkumatar | 0:c60fccf1ea71 | 26 | int auto_mode=0; |
darkumatar | 0:c60fccf1ea71 | 27 | |
darkumatar | 0:c60fccf1ea71 | 28 | int direct_xx=0; |
darkumatar | 0:c60fccf1ea71 | 29 | int direct_yy=0; |
darkumatar | 0:c60fccf1ea71 | 30 | int direct_turn=0; |
darkumatar | 0:c60fccf1ea71 | 31 | |
darkumatar | 0:c60fccf1ea71 | 32 | DigitalOut Led1(PB_2); |
darkumatar | 0:c60fccf1ea71 | 33 | DigitalOut Led2(PC_6); |
darkumatar | 0:c60fccf1ea71 | 34 | DigitalOut Led3(PB_15); |
darkumatar | 0:c60fccf1ea71 | 35 | DigitalOut Led4(PA_10); |
darkumatar | 0:c60fccf1ea71 | 36 | int check_tepu=0; |
darkumatar | 0:c60fccf1ea71 | 37 | |
darkumatar | 0:c60fccf1ea71 | 38 | bool limi=true; |
darkumatar | 1:1f9a3449bbb9 | 39 | bool liset_abc=false; |
darkumatar | 0:c60fccf1ea71 | 40 | |
darkumatar | 0:c60fccf1ea71 | 41 | |
darkumatar | 0:c60fccf1ea71 | 42 | DigitalIn limitB(PB_12,PullUp); |
darkumatar | 0:c60fccf1ea71 | 43 | |
darkumatar | 0:c60fccf1ea71 | 44 | |
darkumatar | 0:c60fccf1ea71 | 45 | |
darkumatar | 0:c60fccf1ea71 | 46 | bool add(int id,int ppp){//速度を変えるやつ |
darkumatar | 0:c60fccf1ea71 | 47 | Led4.write(0); |
darkumatar | 0:c60fccf1ea71 | 48 | if(auto_swich==false&&limi==true){ |
darkumatar | 0:c60fccf1ea71 | 49 | target[id]=30*ppp; |
darkumatar | 0:c60fccf1ea71 | 50 | } |
darkumatar | 0:c60fccf1ea71 | 51 | return true; |
darkumatar | 0:c60fccf1ea71 | 52 | } |
darkumatar | 0:c60fccf1ea71 | 53 | |
darkumatar | 0:c60fccf1ea71 | 54 | bool anglez(int id,int ppp){//おまけで作ったやつ アングルを決めてその方向へ走る |
darkumatar | 0:c60fccf1ea71 | 55 | angler=ppp; |
darkumatar | 0:c60fccf1ea71 | 56 | for(int i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 57 | //target[i]=(sin(M_PI/180.0*(angler+90*i))+cos(M_PI/180.0*(angler+90*i)))*speedr; |
darkumatar | 0:c60fccf1ea71 | 58 | |
darkumatar | 0:c60fccf1ea71 | 59 | } |
darkumatar | 0:c60fccf1ea71 | 60 | return true; |
darkumatar | 0:c60fccf1ea71 | 61 | } |
darkumatar | 0:c60fccf1ea71 | 62 | |
darkumatar | 0:c60fccf1ea71 | 63 | bool speedz(int id,int ppp){//おまけで作ったやつ スピードを決めてその方向へ走る |
darkumatar | 0:c60fccf1ea71 | 64 | speedr=ppp; |
darkumatar | 0:c60fccf1ea71 | 65 | for(int i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 66 | target[i]=(sin(M_PI/180.0*(angler+90*i))+cos(M_PI/180.0*(angler+90*i)))*speedr; |
darkumatar | 0:c60fccf1ea71 | 67 | |
darkumatar | 0:c60fccf1ea71 | 68 | } |
darkumatar | 0:c60fccf1ea71 | 69 | return true; |
darkumatar | 0:c60fccf1ea71 | 70 | } |
darkumatar | 0:c60fccf1ea71 | 71 | |
darkumatar | 0:c60fccf1ea71 | 72 | bool auto_on(int id,int ppp){//おまけで作ったやつ スピードを決めてその方向へ走る |
darkumatar | 0:c60fccf1ea71 | 73 | if(ppp==1){ |
darkumatar | 0:c60fccf1ea71 | 74 | auto_swich=true; |
darkumatar | 0:c60fccf1ea71 | 75 | step=0; |
darkumatar | 0:c60fccf1ea71 | 76 | } |
darkumatar | 0:c60fccf1ea71 | 77 | return true; |
darkumatar | 0:c60fccf1ea71 | 78 | } |
darkumatar | 0:c60fccf1ea71 | 79 | |
darkumatar | 0:c60fccf1ea71 | 80 | bool auto_off(int id,int ppp){//おまけで作ったやつ スピードを決めてその方向へ走る |
darkumatar | 0:c60fccf1ea71 | 81 | if(ppp==1){ |
darkumatar | 0:c60fccf1ea71 | 82 | auto_swich=false; |
darkumatar | 0:c60fccf1ea71 | 83 | step=0; |
darkumatar | 0:c60fccf1ea71 | 84 | } |
darkumatar | 0:c60fccf1ea71 | 85 | return true; |
darkumatar | 0:c60fccf1ea71 | 86 | } |
darkumatar | 0:c60fccf1ea71 | 87 | |
darkumatar | 0:c60fccf1ea71 | 88 | bool turn(int id,int ppp){//回転 |
darkumatar | 0:c60fccf1ea71 | 89 | for(int i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 90 | target[i]=ppp; |
darkumatar | 0:c60fccf1ea71 | 91 | } |
darkumatar | 0:c60fccf1ea71 | 92 | return true; |
darkumatar | 0:c60fccf1ea71 | 93 | } |
darkumatar | 0:c60fccf1ea71 | 94 | |
darkumatar | 0:c60fccf1ea71 | 95 | bool pro(int id,int ppp){ //アングルとスピードを同時に決める 下から3桁で角度を決める(0~360) それ以外でスピードを決める これなに?私もわからん |
darkumatar | 0:c60fccf1ea71 | 96 | int angle=ppp%1000; |
darkumatar | 0:c60fccf1ea71 | 97 | int speed=ppp/1000; |
darkumatar | 0:c60fccf1ea71 | 98 | for(int i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 99 | target[i]=(sin(M_PI/180.0*(angle+90*i))+cos(M_PI/180.0*(angle+90*i)))*speed*100.0; |
darkumatar | 0:c60fccf1ea71 | 100 | |
darkumatar | 0:c60fccf1ea71 | 101 | } |
darkumatar | 0:c60fccf1ea71 | 102 | return true; |
darkumatar | 0:c60fccf1ea71 | 103 | } |
darkumatar | 0:c60fccf1ea71 | 104 | bool pro2(){ //アングルとスピードを同時に決める 下から3桁で角度を決める(0~360) それ以外でスピードを決める これなに?私もわからん |
darkumatar | 1:1f9a3449bbb9 | 105 | double anglert=-135.000000000+180.0; |
darkumatar | 0:c60fccf1ea71 | 106 | Led4.write(1); |
darkumatar | 0:c60fccf1ea71 | 107 | for(int i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 108 | target[i]=(direct_yy*sin(M_PI/180.0*(90*i - gyro.yaw - anglert))-direct_xx*cos(M_PI/180.0*(90*i - gyro.yaw - anglert))+direct_turn)*30.0; |
darkumatar | 0:c60fccf1ea71 | 109 | |
darkumatar | 0:c60fccf1ea71 | 110 | } |
darkumatar | 0:c60fccf1ea71 | 111 | return true; |
darkumatar | 0:c60fccf1ea71 | 112 | } |
darkumatar | 0:c60fccf1ea71 | 113 | bool pro3(double goal_angle_ppp,int goal_x_speed,int goal_y_speed){ |
darkumatar | 0:c60fccf1ea71 | 114 | double anglert=-135.000000000; |
darkumatar | 0:c60fccf1ea71 | 115 | for(int i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 116 | target[i]=(goal_y_speed*sin(M_PI/180.0*(90*i - gyro.yaw - anglert))-goal_x_speed*cos(M_PI/180.0*(90*i - gyro.yaw - anglert))+goal_angle_ppp)*30.0; |
darkumatar | 0:c60fccf1ea71 | 117 | |
darkumatar | 0:c60fccf1ea71 | 118 | } |
darkumatar | 0:c60fccf1ea71 | 119 | return true; |
darkumatar | 0:c60fccf1ea71 | 120 | } |
darkumatar | 0:c60fccf1ea71 | 121 | int test_limit(int test_limilimi){ |
darkumatar | 0:c60fccf1ea71 | 122 | test_limilimi=test_limilimi/100; |
darkumatar | 0:c60fccf1ea71 | 123 | if(test_limilimi>64){ |
darkumatar | 0:c60fccf1ea71 | 124 | test_limilimi=64; |
darkumatar | 0:c60fccf1ea71 | 125 | } |
darkumatar | 0:c60fccf1ea71 | 126 | if(test_limilimi<-64){ |
darkumatar | 0:c60fccf1ea71 | 127 | test_limilimi=-64; |
darkumatar | 0:c60fccf1ea71 | 128 | } |
darkumatar | 0:c60fccf1ea71 | 129 | return test_limilimi; |
darkumatar | 0:c60fccf1ea71 | 130 | } |
darkumatar | 0:c60fccf1ea71 | 131 | |
darkumatar | 0:c60fccf1ea71 | 132 | double test_ang(double test_limilimi){ |
darkumatar | 0:c60fccf1ea71 | 133 | test_limilimi=test_limilimi*2; |
darkumatar | 0:c60fccf1ea71 | 134 | if(test_limilimi>40){ |
darkumatar | 0:c60fccf1ea71 | 135 | test_limilimi=40; |
darkumatar | 0:c60fccf1ea71 | 136 | } |
darkumatar | 0:c60fccf1ea71 | 137 | if(test_limilimi<-40){ |
darkumatar | 0:c60fccf1ea71 | 138 | test_limilimi=-40; |
darkumatar | 0:c60fccf1ea71 | 139 | } |
darkumatar | 0:c60fccf1ea71 | 140 | return test_limilimi; |
darkumatar | 0:c60fccf1ea71 | 141 | } |
darkumatar | 0:c60fccf1ea71 | 142 | |
darkumatar | 0:c60fccf1ea71 | 143 | bool limit2(int id,int ppp){ |
darkumatar | 0:c60fccf1ea71 | 144 | if(ppp==1){ |
darkumatar | 0:c60fccf1ea71 | 145 | limit_switch=false; |
darkumatar | 0:c60fccf1ea71 | 146 | } |
darkumatar | 0:c60fccf1ea71 | 147 | return true; |
darkumatar | 0:c60fccf1ea71 | 148 | } |
darkumatar | 0:c60fccf1ea71 | 149 | |
darkumatar | 0:c60fccf1ea71 | 150 | bool direct_x(int id,int ppp){ |
darkumatar | 0:c60fccf1ea71 | 151 | direct_xx=ppp; |
darkumatar | 0:c60fccf1ea71 | 152 | pro2(); |
darkumatar | 0:c60fccf1ea71 | 153 | return true; |
darkumatar | 0:c60fccf1ea71 | 154 | } |
darkumatar | 0:c60fccf1ea71 | 155 | bool direct_y(int id,int ppp){ |
darkumatar | 0:c60fccf1ea71 | 156 | direct_yy=ppp; |
darkumatar | 0:c60fccf1ea71 | 157 | pro2(); |
darkumatar | 0:c60fccf1ea71 | 158 | return true; |
darkumatar | 0:c60fccf1ea71 | 159 | } |
darkumatar | 0:c60fccf1ea71 | 160 | |
darkumatar | 0:c60fccf1ea71 | 161 | bool direct_tu(int id,int ppp){ |
darkumatar | 0:c60fccf1ea71 | 162 | direct_turn=ppp; |
darkumatar | 0:c60fccf1ea71 | 163 | pro2(); |
darkumatar | 0:c60fccf1ea71 | 164 | return true; |
darkumatar | 0:c60fccf1ea71 | 165 | } |
darkumatar | 0:c60fccf1ea71 | 166 | |
darkumatar | 0:c60fccf1ea71 | 167 | bool limit(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 168 | return limit2(0,a); |
darkumatar | 0:c60fccf1ea71 | 169 | } |
darkumatar | 0:c60fccf1ea71 | 170 | bool abc1(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 171 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 172 | return add(0,a); |
darkumatar | 0:c60fccf1ea71 | 173 | } |
darkumatar | 0:c60fccf1ea71 | 174 | bool abc2(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 175 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 176 | return add(1,a); |
darkumatar | 0:c60fccf1ea71 | 177 | } |
darkumatar | 0:c60fccf1ea71 | 178 | bool abc3(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 179 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 180 | return add(2,a); |
darkumatar | 0:c60fccf1ea71 | 181 | } |
darkumatar | 0:c60fccf1ea71 | 182 | bool abc4(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 183 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 184 | return add(3,a); |
darkumatar | 0:c60fccf1ea71 | 185 | } |
darkumatar | 0:c60fccf1ea71 | 186 | |
darkumatar | 0:c60fccf1ea71 | 187 | bool abc5(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 188 | return turn(0,a); |
darkumatar | 0:c60fccf1ea71 | 189 | } |
darkumatar | 0:c60fccf1ea71 | 190 | /* |
darkumatar | 0:c60fccf1ea71 | 191 | bool abc6(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 192 | return pro(0,a); |
darkumatar | 0:c60fccf1ea71 | 193 | } |
darkumatar | 0:c60fccf1ea71 | 194 | bool abc7(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 195 | return anglez(0,a); |
darkumatar | 0:c60fccf1ea71 | 196 | } |
darkumatar | 0:c60fccf1ea71 | 197 | bool abc8(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 198 | return speedz(0,a); |
darkumatar | 0:c60fccf1ea71 | 199 | } |
darkumatar | 0:c60fccf1ea71 | 200 | */ |
darkumatar | 0:c60fccf1ea71 | 201 | bool abc9(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 202 | return auto_on(0,a); |
darkumatar | 0:c60fccf1ea71 | 203 | } |
darkumatar | 0:c60fccf1ea71 | 204 | bool abc10(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 205 | return auto_off(0,a); |
darkumatar | 0:c60fccf1ea71 | 206 | } |
darkumatar | 0:c60fccf1ea71 | 207 | bool abc11(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 208 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 209 | return direct_x(0,a); |
darkumatar | 0:c60fccf1ea71 | 210 | } |
darkumatar | 0:c60fccf1ea71 | 211 | bool abc12(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 212 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 213 | return direct_y(0,a); |
darkumatar | 0:c60fccf1ea71 | 214 | } |
darkumatar | 0:c60fccf1ea71 | 215 | bool abc13(int a,int &b){ |
darkumatar | 0:c60fccf1ea71 | 216 | check_tepu+=1; |
darkumatar | 0:c60fccf1ea71 | 217 | return direct_tu(0,a); |
darkumatar | 0:c60fccf1ea71 | 218 | } |
darkumatar | 1:1f9a3449bbb9 | 219 | bool abc14(int a,int &b){ |
darkumatar | 1:1f9a3449bbb9 | 220 | if(a==1){ |
darkumatar | 1:1f9a3449bbb9 | 221 | liset_abc=true; |
darkumatar | 1:1f9a3449bbb9 | 222 | }else{ |
darkumatar | 1:1f9a3449bbb9 | 223 | liset_abc=false; |
darkumatar | 1:1f9a3449bbb9 | 224 | } |
darkumatar | 1:1f9a3449bbb9 | 225 | return true; |
darkumatar | 1:1f9a3449bbb9 | 226 | } |
darkumatar | 0:c60fccf1ea71 | 227 | |
darkumatar | 0:c60fccf1ea71 | 228 | |
darkumatar | 1:1f9a3449bbb9 | 229 | |
darkumatar | 0:c60fccf1ea71 | 230 | int main() { |
darkumatar | 0:c60fccf1ea71 | 231 | Led1.write(1); |
darkumatar | 0:c60fccf1ea71 | 232 | Led2.write(0); |
darkumatar | 0:c60fccf1ea71 | 233 | slave.addCMD(1,limit); |
darkumatar | 0:c60fccf1ea71 | 234 | slave.addCMD(2,abc1); |
darkumatar | 0:c60fccf1ea71 | 235 | slave.addCMD(3,abc2); |
darkumatar | 0:c60fccf1ea71 | 236 | slave.addCMD(4,abc3); |
darkumatar | 0:c60fccf1ea71 | 237 | slave.addCMD(5,abc4); |
darkumatar | 0:c60fccf1ea71 | 238 | slave.addCMD(12,abc9); |
darkumatar | 0:c60fccf1ea71 | 239 | slave.addCMD(13,abc10); |
darkumatar | 0:c60fccf1ea71 | 240 | slave.addCMD(31,abc11); |
darkumatar | 0:c60fccf1ea71 | 241 | slave.addCMD(32,abc12); |
darkumatar | 0:c60fccf1ea71 | 242 | slave.addCMD(33,abc13); |
darkumatar | 1:1f9a3449bbb9 | 243 | slave.addCMD(34,abc14); |
darkumatar | 0:c60fccf1ea71 | 244 | int i; |
darkumatar | 0:c60fccf1ea71 | 245 | double x_period=0; |
darkumatar | 0:c60fccf1ea71 | 246 | double y_period=0; |
darkumatar | 0:c60fccf1ea71 | 247 | int after[4],before[4],before_parus[4],speed_pwm[4],after_pwm[4],before_pwm[4]; |
darkumatar | 0:c60fccf1ea71 | 248 | double ca[4],P[4],I[4],D[4],integral[4]; |
darkumatar | 0:c60fccf1ea71 | 249 | PwmOut motor_p[4]{PwmOut(PB_1),PwmOut(PB_13),PwmOut(PC_9),PwmOut(PB_7)};//モーター宣言 PB_6 PC_8 |
darkumatar | 0:c60fccf1ea71 | 250 | PwmOut motor_m[4]{PwmOut(PA_11),PwmOut(PB_14),PwmOut(PC_8),PwmOut(PB_6)};//モーター宣言 PB_7 PC_9 |
darkumatar | 0:c60fccf1ea71 | 251 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 252 | motor_p[i].period_us(2048); |
darkumatar | 0:c60fccf1ea71 | 253 | motor_m[i].period_us(2048); |
darkumatar | 0:c60fccf1ea71 | 254 | target[i]=0; |
darkumatar | 0:c60fccf1ea71 | 255 | after[i]=0; |
darkumatar | 0:c60fccf1ea71 | 256 | before[i]=0; |
darkumatar | 0:c60fccf1ea71 | 257 | ca[i]=0; |
darkumatar | 0:c60fccf1ea71 | 258 | P[i]=0; |
darkumatar | 0:c60fccf1ea71 | 259 | I[i]=0; |
darkumatar | 0:c60fccf1ea71 | 260 | D[i]=0; |
darkumatar | 0:c60fccf1ea71 | 261 | before_parus[i]=0; |
darkumatar | 0:c60fccf1ea71 | 262 | integral[i]=0; |
darkumatar | 0:c60fccf1ea71 | 263 | speed_pwm[i]=0; |
darkumatar | 0:c60fccf1ea71 | 264 | after_pwm[i]=0; |
darkumatar | 0:c60fccf1ea71 | 265 | before_pwm[i]=0; |
darkumatar | 0:c60fccf1ea71 | 266 | } |
darkumatar | 0:c60fccf1ea71 | 267 | Timer name; |
darkumatar | 0:c60fccf1ea71 | 268 | Timer limilimi; |
darkumatar | 0:c60fccf1ea71 | 269 | limilimi.start(); |
darkumatar | 0:c60fccf1ea71 | 270 | name.start(); |
darkumatar | 0:c60fccf1ea71 | 271 | gyro.start(); |
darkumatar | 0:c60fccf1ea71 | 272 | double angle=0; |
darkumatar | 0:c60fccf1ea71 | 273 | double goal_angle1=0; |
darkumatar | 0:c60fccf1ea71 | 274 | double test_speed_auto=0; |
darkumatar | 0:c60fccf1ea71 | 275 | Led1.write(1); |
darkumatar | 0:c60fccf1ea71 | 276 | bool limilimi_swich=false; |
darkumatar | 0:c60fccf1ea71 | 277 | while(limit_switch==true) { |
darkumatar | 0:c60fccf1ea71 | 278 | angle=gyro.yaw-90.00000; |
darkumatar | 0:c60fccf1ea71 | 279 | if(auto_swich==true){ |
darkumatar | 0:c60fccf1ea71 | 280 | |
darkumatar | 0:c60fccf1ea71 | 281 | |
darkumatar | 0:c60fccf1ea71 | 282 | |
darkumatar | 0:c60fccf1ea71 | 283 | /* |
darkumatar | 0:c60fccf1ea71 | 284 | |
darkumatar | 0:c60fccf1ea71 | 285 | goal_angle1=-1.0*atan((goal_x-x_period)/(goal_y-y_period))/M_PI*180.0; |
darkumatar | 0:c60fccf1ea71 | 286 | if(goal_angle1>0){ |
darkumatar | 0:c60fccf1ea71 | 287 | goal_angle1-=180.0; |
darkumatar | 0:c60fccf1ea71 | 288 | }else{ |
darkumatar | 0:c60fccf1ea71 | 289 | goal_angle1+=180.0; |
darkumatar | 0:c60fccf1ea71 | 290 | } |
darkumatar | 0:c60fccf1ea71 | 291 | if(step==0&&((goal_angle1-gyro.yaw)>1||(goal_angle1-gyro.yaw)<-1)){ |
darkumatar | 0:c60fccf1ea71 | 292 | test_speed_auto=(goal_angle1-gyro.yaw)*-20.0; |
darkumatar | 0:c60fccf1ea71 | 293 | if(test_speed_auto>2000){ |
darkumatar | 0:c60fccf1ea71 | 294 | test_speed_auto=2000; |
darkumatar | 0:c60fccf1ea71 | 295 | }else if(test_speed_auto<-2000){ |
darkumatar | 0:c60fccf1ea71 | 296 | test_speed_auto=-2000; |
darkumatar | 0:c60fccf1ea71 | 297 | } |
darkumatar | 0:c60fccf1ea71 | 298 | turn(0,(test_speed_auto)*1); |
darkumatar | 0:c60fccf1ea71 | 299 | }else if(step>=0&&step<3){ |
darkumatar | 0:c60fccf1ea71 | 300 | step+=1; |
darkumatar | 0:c60fccf1ea71 | 301 | }else if(step==3&&((sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))-sqrt(period_r*period_r)>1000)|| (sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))-sqrt(period_r*period_r)<-1000))){ |
darkumatar | 0:c60fccf1ea71 | 302 | test_speed_auto=-1.0*(sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))-sqrt(period_r*period_r))/10.0; |
darkumatar | 0:c60fccf1ea71 | 303 | if(test_speed_auto>1000){ |
darkumatar | 0:c60fccf1ea71 | 304 | test_speed_auto=1000; |
darkumatar | 0:c60fccf1ea71 | 305 | }else if(test_speed_auto<-1000){ |
darkumatar | 0:c60fccf1ea71 | 306 | test_speed_auto=-1000; |
darkumatar | 0:c60fccf1ea71 | 307 | } |
darkumatar | 0:c60fccf1ea71 | 308 | speedz(0,(test_speed_auto)*1); |
darkumatar | 0:c60fccf1ea71 | 309 | |
darkumatar | 0:c60fccf1ea71 | 310 | }else { |
darkumatar | 0:c60fccf1ea71 | 311 | auto_swich=false; |
darkumatar | 0:c60fccf1ea71 | 312 | } |
darkumatar | 0:c60fccf1ea71 | 313 | |
darkumatar | 0:c60fccf1ea71 | 314 | */ |
darkumatar | 0:c60fccf1ea71 | 315 | goal_angle1=-1.0*atan((goal_x2-x_period)/(goal_y2-y_period))/M_PI*180.0; |
darkumatar | 0:c60fccf1ea71 | 316 | /* |
darkumatar | 0:c60fccf1ea71 | 317 | if(goal_angle1>0){ |
darkumatar | 0:c60fccf1ea71 | 318 | goal_angle1-=180.0; |
darkumatar | 0:c60fccf1ea71 | 319 | }else{ |
darkumatar | 0:c60fccf1ea71 | 320 | goal_angle1+=180.0; |
darkumatar | 0:c60fccf1ea71 | 321 | } |
darkumatar | 0:c60fccf1ea71 | 322 | |
darkumatar | 0:c60fccf1ea71 | 323 | */ |
darkumatar | 0:c60fccf1ea71 | 324 | |
darkumatar | 0:c60fccf1ea71 | 325 | if(step==0&&((sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))>1000)|| (sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))<-1000))){ |
darkumatar | 0:c60fccf1ea71 | 326 | pro3(-test_ang(goal_angle1-gyro.yaw),test_limit(goal_x-x_period),test_limit(goal_y-y_period)); |
darkumatar | 0:c60fccf1ea71 | 327 | }else if(step>=0&&step<60){ |
darkumatar | 0:c60fccf1ea71 | 328 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 329 | target[i]=0; |
darkumatar | 0:c60fccf1ea71 | 330 | motor_p[i]=0; |
darkumatar | 0:c60fccf1ea71 | 331 | motor_m[i]=0; |
darkumatar | 0:c60fccf1ea71 | 332 | } |
darkumatar | 0:c60fccf1ea71 | 333 | pro3(-test_ang(goal_angle1-gyro.yaw),test_limit(goal_x-x_period),test_limit(goal_y-y_period)); |
darkumatar | 0:c60fccf1ea71 | 334 | }else if(step==60&&((sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))-sqrt(period_r*period_r)>1000)|| (sqrt((goal_y-y_period)*(goal_y-y_period)+(goal_x-x_period)*(goal_x-x_period))-sqrt(period_r*period_r)<-1000))){ |
darkumatar | 0:c60fccf1ea71 | 335 | |
darkumatar | 0:c60fccf1ea71 | 336 | |
darkumatar | 0:c60fccf1ea71 | 337 | }else { |
darkumatar | 0:c60fccf1ea71 | 338 | auto_swich=false; |
darkumatar | 0:c60fccf1ea71 | 339 | } |
darkumatar | 0:c60fccf1ea71 | 340 | |
darkumatar | 0:c60fccf1ea71 | 341 | |
darkumatar | 0:c60fccf1ea71 | 342 | } |
darkumatar | 0:c60fccf1ea71 | 343 | |
darkumatar | 0:c60fccf1ea71 | 344 | /* |
darkumatar | 0:c60fccf1ea71 | 345 | if(limitB){ |
darkumatar | 0:c60fccf1ea71 | 346 | limi=true; |
darkumatar | 0:c60fccf1ea71 | 347 | limilimi_swich=false; |
darkumatar | 0:c60fccf1ea71 | 348 | }else{ |
darkumatar | 0:c60fccf1ea71 | 349 | int arc=0; |
darkumatar | 0:c60fccf1ea71 | 350 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 351 | arc+=target[i]*sin((45.0+90.0*i)/90.0*M_PI); |
darkumatar | 0:c60fccf1ea71 | 352 | } |
darkumatar | 0:c60fccf1ea71 | 353 | if(arc>0){ |
darkumatar | 0:c60fccf1ea71 | 354 | } |
darkumatar | 0:c60fccf1ea71 | 355 | if(limilimi_swich==false){ |
darkumatar | 0:c60fccf1ea71 | 356 | limilimi_swich=true; |
darkumatar | 0:c60fccf1ea71 | 357 | limilimi.reset(); |
darkumatar | 0:c60fccf1ea71 | 358 | } |
darkumatar | 0:c60fccf1ea71 | 359 | } |
darkumatar | 0:c60fccf1ea71 | 360 | if(limilimi.read_ms()<500&&!limitB){ |
darkumatar | 0:c60fccf1ea71 | 361 | limi=false; |
darkumatar | 0:c60fccf1ea71 | 362 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 363 | target[i] =0; |
darkumatar | 0:c60fccf1ea71 | 364 | } |
darkumatar | 0:c60fccf1ea71 | 365 | }else { |
darkumatar | 0:c60fccf1ea71 | 366 | limi=true; |
darkumatar | 0:c60fccf1ea71 | 367 | } |
darkumatar | 0:c60fccf1ea71 | 368 | |
darkumatar | 0:c60fccf1ea71 | 369 | */ |
darkumatar | 0:c60fccf1ea71 | 370 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 371 | after_pwm[i]=rote[i].get(); |
darkumatar | 0:c60fccf1ea71 | 372 | after[i]=v[i].get();//ロリコンから値読み取り |
darkumatar | 0:c60fccf1ea71 | 373 | integral[i]+= (((((target[i]/10.0-(after[i]-before[i]))+ before_parus[i])*0.1)/2.0)/102.40);//積分の所 |
darkumatar | 0:c60fccf1ea71 | 374 | P[i]=0.05*(target[i]/10.0-(after[i]-before[i]))/102.40;//比例 |
darkumatar | 0:c60fccf1ea71 | 375 | D[i]=0.0001*((((target[i]/10.0-(after[i]-before[i]))- before_parus[i])/0.1)/102.40);//微分 |
darkumatar | 0:c60fccf1ea71 | 376 | I[i]=0.0001*integral[i];//積分 |
darkumatar | 0:c60fccf1ea71 | 377 | ca[i]=ca[i]+P[i]+I[i]+D[i];//足し合わせる |
darkumatar | 0:c60fccf1ea71 | 378 | if(ca[i]>0.4){ca[i]=0.4;} |
darkumatar | 0:c60fccf1ea71 | 379 | if(ca[i]<-0.4){ca[i]=-0.4;} |
darkumatar | 0:c60fccf1ea71 | 380 | if(0.015>ca[i]&&ca[i]>-0.015){ca[i]=0;} |
darkumatar | 0:c60fccf1ea71 | 381 | motor_p[i]=ca[i]; |
darkumatar | 0:c60fccf1ea71 | 382 | motor_m[i]=ca[i]*-1.0; |
darkumatar | 0:c60fccf1ea71 | 383 | speed_pwm[i]=after_pwm[i]-before_pwm[i]; |
darkumatar | 0:c60fccf1ea71 | 384 | before_parus[i]=target[i]/10.0-(after[i]-before[i]); |
darkumatar | 0:c60fccf1ea71 | 385 | before[i]=after[i]; |
darkumatar | 0:c60fccf1ea71 | 386 | before_pwm[i]=after_pwm[i]; |
darkumatar | 0:c60fccf1ea71 | 387 | } |
darkumatar | 0:c60fccf1ea71 | 388 | /* |
darkumatar | 0:c60fccf1ea71 | 389 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 390 | x_period+=speed_pwm[i]*cos(M_PI/180.0*(angle + 90.0*i)); |
darkumatar | 0:c60fccf1ea71 | 391 | y_period+=speed_pwm[i]*sin(M_PI/180.0*(angle + 90.0*i)); |
darkumatar | 0:c60fccf1ea71 | 392 | } |
darkumatar | 0:c60fccf1ea71 | 393 | */ |
darkumatar | 0:c60fccf1ea71 | 394 | x_period+=(((speed_pwm[0]-speed_pwm[2])*cos(M_PI/180.0*angle)+(speed_pwm[1]-speed_pwm[3])*cos(M_PI/180.0*(angle+90.0))*(-1.0))/2); |
darkumatar | 0:c60fccf1ea71 | 395 | y_period+=(((speed_pwm[0]-speed_pwm[2])*sin(M_PI/180.0*angle)+(speed_pwm[1]-speed_pwm[3])*sin(M_PI/180.0*(angle+90.0))*(-1.0))/2); |
darkumatar | 1:1f9a3449bbb9 | 396 | if(liset_abc==true){ |
darkumatar | 1:1f9a3449bbb9 | 397 | x_period=0; |
darkumatar | 1:1f9a3449bbb9 | 398 | y_period=0; |
darkumatar | 1:1f9a3449bbb9 | 399 | gyro.reset(0); |
darkumatar | 1:1f9a3449bbb9 | 400 | |
darkumatar | 1:1f9a3449bbb9 | 401 | } |
darkumatar | 0:c60fccf1ea71 | 402 | slave.port2.printf("%d\n",1); |
darkumatar | 0:c60fccf1ea71 | 403 | while(name.read_ms()<30){} |
darkumatar | 0:c60fccf1ea71 | 404 | slave.send1(255,16,x_period*1); |
darkumatar | 0:c60fccf1ea71 | 405 | while(name.read_ms()<60){} |
darkumatar | 0:c60fccf1ea71 | 406 | slave.send1(255,17,y_period*1); |
darkumatar | 0:c60fccf1ea71 | 407 | while(name.read_ms()<100){} |
darkumatar | 0:c60fccf1ea71 | 408 | slave.send1(255,18,gyro.yaw*1); |
darkumatar | 0:c60fccf1ea71 | 409 | for(i = 0; i < 4; i++){ |
darkumatar | 0:c60fccf1ea71 | 410 | npx.global_scale = 0.05f; |
darkumatar | 0:c60fccf1ea71 | 411 | npx.normalize = false; |
darkumatar | 0:c60fccf1ea71 | 412 | if(check_tepu>0){ |
darkumatar | 0:c60fccf1ea71 | 413 | npx.setPixelColor(i,0xFF0000); |
darkumatar | 0:c60fccf1ea71 | 414 | }else { |
darkumatar | 0:c60fccf1ea71 | 415 | npx.setPixelColor(i,0x0000FF); |
darkumatar | 0:c60fccf1ea71 | 416 | } |
darkumatar | 0:c60fccf1ea71 | 417 | } |
darkumatar | 0:c60fccf1ea71 | 418 | for(i = 4; i < 7; i++){ |
darkumatar | 0:c60fccf1ea71 | 419 | npx.global_scale = 0.05f; |
darkumatar | 0:c60fccf1ea71 | 420 | npx.normalize = false; |
darkumatar | 0:c60fccf1ea71 | 421 | if(auto_swich){ |
darkumatar | 0:c60fccf1ea71 | 422 | npx.setPixelColor(i,0xFFFFFF); |
darkumatar | 0:c60fccf1ea71 | 423 | }else { |
darkumatar | 0:c60fccf1ea71 | 424 | npx.setPixelColor(i,0x00FF00); |
darkumatar | 0:c60fccf1ea71 | 425 | } |
darkumatar | 0:c60fccf1ea71 | 426 | } |
darkumatar | 0:c60fccf1ea71 | 427 | npx.show(); |
darkumatar | 0:c60fccf1ea71 | 428 | if(check_tepu==0){ |
darkumatar | 0:c60fccf1ea71 | 429 | auto_mode+=1; |
darkumatar | 0:c60fccf1ea71 | 430 | Led2.write(1); |
darkumatar | 0:c60fccf1ea71 | 431 | }else { |
darkumatar | 0:c60fccf1ea71 | 432 | auto_mode=0; |
darkumatar | 0:c60fccf1ea71 | 433 | Led2.write(0); |
darkumatar | 0:c60fccf1ea71 | 434 | } |
darkumatar | 0:c60fccf1ea71 | 435 | if(auto_mode>1){ |
darkumatar | 0:c60fccf1ea71 | 436 | limit_switch=false; |
darkumatar | 0:c60fccf1ea71 | 437 | } |
darkumatar | 0:c60fccf1ea71 | 438 | check_tepu=0; |
darkumatar | 0:c60fccf1ea71 | 439 | gyro.update(); |
darkumatar | 0:c60fccf1ea71 | 440 | name.reset(); |
darkumatar | 0:c60fccf1ea71 | 441 | } |
darkumatar | 0:c60fccf1ea71 | 442 | while(1){ |
darkumatar | 0:c60fccf1ea71 | 443 | Led3.write(1); |
darkumatar | 0:c60fccf1ea71 | 444 | for(i=0;i<4;i++){ |
darkumatar | 0:c60fccf1ea71 | 445 | target[i]=0; |
darkumatar | 0:c60fccf1ea71 | 446 | motor_p[i]=0; |
darkumatar | 0:c60fccf1ea71 | 447 | motor_m[i]=0; |
darkumatar | 0:c60fccf1ea71 | 448 | npx.global_scale = 0.05f; |
darkumatar | 0:c60fccf1ea71 | 449 | npx.normalize = false; |
darkumatar | 0:c60fccf1ea71 | 450 | npx.setPixelColor(i,0x00FFFF); |
darkumatar | 0:c60fccf1ea71 | 451 | } |
darkumatar | 0:c60fccf1ea71 | 452 | npx.show(); |
darkumatar | 0:c60fccf1ea71 | 453 | } |
darkumatar | 0:c60fccf1ea71 | 454 | } |