Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@49:6337717484fe, 2019-05-20 (annotated)
- Committer:
- yuto17320508
- Date:
- Mon May 20 00:54:03 2019 +0000
- Revision:
- 49:6337717484fe
- Parent:
- 48:d9f3ce701aca
- Child:
- 50:3e73f68c3b37
- Child:
- 54:f54d26e8d8ac
l
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eri | 0:c1476d342c13 | 1 | #include "mbed.h" |
shimizuta | 17:2b3fa9b1a05b | 2 | #include "debug.h" |
eri | 0:c1476d342c13 | 3 | #include "microinfinity.h" |
shimizuta | 21:14133581387b | 4 | #include "sensors.h" |
shimizuta | 22:0ed9de464f40 | 5 | #include "moves.h" |
yuto17320508 | 48:d9f3ce701aca | 6 | #include <stdlib.h> |
yuto17320508 | 48:d9f3ce701aca | 7 | |
yuto17320508 | 48:d9f3ce701aca | 8 | |
yuto17320508 | 48:d9f3ce701aca | 9 | #define BADRULEMODE |
shimizuta | 21:14133581387b | 10 | |
yuto17320508 | 25:c740e6fd5dab | 11 | void StateFlow(int i); |
yuto17320508 | 32:aee87dcaf7ca | 12 | void SetMode(); |
yuto17320508 | 32:aee87dcaf7ca | 13 | void Start(); |
yuto17320508 | 32:aee87dcaf7ca | 14 | void NoHandSignal(); |
yuto17320508 | 48:d9f3ce701aca | 15 | void LoadParameter(); |
yuto17320508 | 33:2dbbe198adaf | 16 | |
yuto17320508 | 32:aee87dcaf7ca | 17 | int start_state=0; |
yuto17320508 | 48:d9f3ce701aca | 18 | LocalFileSystem SeqFile("Local"); |
yuto17320508 | 48:d9f3ce701aca | 19 | |
yuto17320508 | 48:d9f3ce701aca | 20 | struct Param { |
yuto17320508 | 48:d9f3ce701aca | 21 | float argument[2]; |
yuto17320508 | 48:d9f3ce701aca | 22 | float duty; |
yuto17320508 | 48:d9f3ce701aca | 23 | float condition; |
yuto17320508 | 48:d9f3ce701aca | 24 | }; |
yuto17320508 | 48:d9f3ce701aca | 25 | struct Param params[17]= {}; //とりあえずいっぱい作った |
shimizuta | 26:5fb1aa9cb7f0 | 26 | |
kageyuta | 1:86c4c38abe40 | 27 | int main() |
kageyuta | 1:86c4c38abe40 | 28 | { |
yuto17320508 | 48:d9f3ce701aca | 29 | LoadParameter(); |
yuto17320508 | 48:d9f3ce701aca | 30 | |
shimizuta | 26:5fb1aa9cb7f0 | 31 | //setup関連 |
shimizuta | 22:0ed9de464f40 | 32 | can1.frequency(1000000); |
shimizuta | 22:0ed9de464f40 | 33 | SetupMoves(); |
yuto17320508 | 25:c740e6fd5dab | 34 | set_gyro(); |
yuto17320508 | 38:89d2a9e6c96f | 35 | |
yuto17320508 | 32:aee87dcaf7ca | 36 | /*while(1) |
yuto17320508 | 32:aee87dcaf7ca | 37 | { |
yuto17320508 | 32:aee87dcaf7ca | 38 | printf("switch 1:%d 2:%d 3:%d LR:%d \r\n", switch_modes[0].read(),switch_modes[1].read(),switch_modes[2].read(),switch_LR.read()); |
yuto17320508 | 38:89d2a9e6c96f | 39 | wait(0.1); |
yuto17320508 | 32:aee87dcaf7ca | 40 | }*/ |
yuto17320508 | 48:d9f3ce701aca | 41 | |
yuto17320508 | 32:aee87dcaf7ca | 42 | printf("hand read:%d\r\n",hand.read()); |
yuto17320508 | 38:89d2a9e6c96f | 43 | |
shimizuta | 22:0ed9de464f40 | 44 | printf("reset standby\r\n"); |
shimizuta | 26:5fb1aa9cb7f0 | 45 | reset();//足をリセット位置に移動 |
shimizuta | 22:0ed9de464f40 | 46 | printf("bus standby\r\n"); |
yuto17320508 | 5:63462d696256 | 47 | while(1) { |
yuto17320508 | 5:63462d696256 | 48 | if(bus_in.read() == 1) break; |
yuto17320508 | 3:7a608fbd3bcd | 49 | } |
shimizuta | 22:0ed9de464f40 | 50 | printf("bus is %d\r\n", bus_in.read()); |
yuto17320508 | 12:9a5de6adae9c | 51 | wait(0.5); |
shimizuta | 26:5fb1aa9cb7f0 | 52 | //一歩動かして初期位置へ |
yuto17320508 | 25:c740e6fd5dab | 53 | motor_lo.setDutyLimit(0.1); |
yuto17320508 | 25:c740e6fd5dab | 54 | motor_li.setDutyLimit(0.1); |
yuto17320508 | 12:9a5de6adae9c | 55 | straight(); |
yuto17320508 | 38:89d2a9e6c96f | 56 | |
yuto17320508 | 38:89d2a9e6c96f | 57 | |
shimizuta | 26:5fb1aa9cb7f0 | 58 | // mode選択 |
yuto17320508 | 32:aee87dcaf7ca | 59 | Start(); |
yuto17320508 | 32:aee87dcaf7ca | 60 | //SetMode(); |
yuto17320508 | 48:d9f3ce701aca | 61 | #ifndef BADRULEMODE |
yuto17320508 | 38:89d2a9e6c96f | 62 | if(RightOrLeft == 0) { |
yuto17320508 | 32:aee87dcaf7ca | 63 | if(start_state == 0) theta0 = -degree/100.0; |
yuto17320508 | 32:aee87dcaf7ca | 64 | else if(start_state == 1) theta0 = -degree/100.0 - 45; |
yuto17320508 | 32:aee87dcaf7ca | 65 | else if(start_state == 2) theta0 = -degree/100.0 - 90; |
yuto17320508 | 32:aee87dcaf7ca | 66 | else if(start_state == 3) theta0 = -degree/100.0 + 90; |
yuto17320508 | 32:aee87dcaf7ca | 67 | else printf("state_error"); |
yuto17320508 | 38:89d2a9e6c96f | 68 | } else { |
yuto17320508 | 32:aee87dcaf7ca | 69 | if(start_state == 0) theta0 = -degree/100.0; |
yuto17320508 | 32:aee87dcaf7ca | 70 | else if(start_state == 1) theta0 = -degree/100.0 + 45; |
yuto17320508 | 32:aee87dcaf7ca | 71 | else if(start_state == 2) theta0 = -degree/100.0 + 90; |
yuto17320508 | 32:aee87dcaf7ca | 72 | else if(start_state == 3) theta0 = -degree/100.0 - 90; |
yuto17320508 | 32:aee87dcaf7ca | 73 | else printf("state_error"); |
yuto17320508 | 32:aee87dcaf7ca | 74 | } |
yuto17320508 | 48:d9f3ce701aca | 75 | #endif |
yuto17320508 | 48:d9f3ce701aca | 76 | #ifdef BADRULEMODE |
yuto17320508 | 48:d9f3ce701aca | 77 | if(RightOrLeft == 0) { |
yuto17320508 | 48:d9f3ce701aca | 78 | if(start_state == 0) theta0 = -degree/100.0; |
yuto17320508 | 48:d9f3ce701aca | 79 | else if(start_state == 1) { |
yuto17320508 | 48:d9f3ce701aca | 80 | theta0 = -degree/100.0 + 90; |
yuto17320508 | 48:d9f3ce701aca | 81 | motor_lo.setDutyLimit(0.6);//0.5 |
yuto17320508 | 48:d9f3ce701aca | 82 | motor_li.setDutyLimit(0.6); |
yuto17320508 | 48:d9f3ce701aca | 83 | turn(35.0); |
yuto17320508 | 48:d9f3ce701aca | 84 | } else if(start_state == 2) { |
yuto17320508 | 48:d9f3ce701aca | 85 | theta0 = -degree/100.0 - 135; |
yuto17320508 | 48:d9f3ce701aca | 86 | motor_lo.setDutyLimit(0.6);//0.5 |
yuto17320508 | 48:d9f3ce701aca | 87 | motor_li.setDutyLimit(0.6); |
yuto17320508 | 48:d9f3ce701aca | 88 | turn(100.0); |
yuto17320508 | 48:d9f3ce701aca | 89 | } else if(start_state == 3) theta0 = -degree/100.0 + 90; |
yuto17320508 | 48:d9f3ce701aca | 90 | else printf("state_error"); |
yuto17320508 | 48:d9f3ce701aca | 91 | } else { |
yuto17320508 | 48:d9f3ce701aca | 92 | if(start_state == 0) theta0 = -degree/100.0; |
yuto17320508 | 48:d9f3ce701aca | 93 | else if(start_state == 1) { |
yuto17320508 | 48:d9f3ce701aca | 94 | theta0 = -degree/100.0 - 45; |
yuto17320508 | 48:d9f3ce701aca | 95 | //段差前旋回 |
yuto17320508 | 48:d9f3ce701aca | 96 | motor_lo.setDutyLimit(0.6);//0.5 |
yuto17320508 | 48:d9f3ce701aca | 97 | motor_li.setDutyLimit(0.6); |
yuto17320508 | 48:d9f3ce701aca | 98 | turn(-35.0); |
yuto17320508 | 48:d9f3ce701aca | 99 | } else if(start_state == 2) { |
yuto17320508 | 48:d9f3ce701aca | 100 | theta0 = -degree/100.0 + 135; |
yuto17320508 | 48:d9f3ce701aca | 101 | motor_lo.setDutyLimit(0.6);//0.5 |
yuto17320508 | 48:d9f3ce701aca | 102 | motor_li.setDutyLimit(0.6); |
yuto17320508 | 48:d9f3ce701aca | 103 | turn(-100.0); |
yuto17320508 | 48:d9f3ce701aca | 104 | } else if(start_state == 3) theta0 = -degree/100.0 - 90; |
yuto17320508 | 48:d9f3ce701aca | 105 | else printf("state_error"); |
yuto17320508 | 48:d9f3ce701aca | 106 | } |
yuto17320508 | 48:d9f3ce701aca | 107 | #endif |
yuto17320508 | 33:2dbbe198adaf | 108 | FileOpen(); |
yuto17320508 | 32:aee87dcaf7ca | 109 | printf("LR:%d StateFlow:%d\r\n", RightOrLeft,start_state); |
yuto17320508 | 25:c740e6fd5dab | 110 | StateFlow(start_state); |
yuto17320508 | 33:2dbbe198adaf | 111 | FileClose(); |
yuto17320508 | 25:c740e6fd5dab | 112 | } |
yuto17320508 | 25:c740e6fd5dab | 113 | |
yuto17320508 | 25:c740e6fd5dab | 114 | void StateFlow(int i) |
yuto17320508 | 25:c740e6fd5dab | 115 | { |
yuto17320508 | 25:c740e6fd5dab | 116 | switch(i) { |
yuto17320508 | 25:c740e6fd5dab | 117 | case 0://最初の直線 |
yuto17320508 | 25:c740e6fd5dab | 118 | printf("go straight!!!!!!!!!!\r\n"); |
yuto17320508 | 49:6337717484fe | 119 | motor_lo.setDutyLimit(params[0].duty); |
yuto17320508 | 49:6337717484fe | 120 | motor_li.setDutyLimit(params[0].duty); |
yuto17320508 | 49:6337717484fe | 121 | for(int i = 0; i < (int)params[0].condition; i++) { |
yuto17320508 | 49:6337717484fe | 122 | straightAndInfinity(params[0].argument[0], params[0].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 123 | } |
yuto17320508 | 25:c740e6fd5dab | 124 | printf("get distance mode"); |
yuto17320508 | 49:6337717484fe | 125 | |
yuto17320508 | 49:6337717484fe | 126 | motor_lo.setDutyLimit(params[1].duty); |
yuto17320508 | 49:6337717484fe | 127 | motor_li.setDutyLimit(params[1].duty); |
yuto17320508 | 25:c740e6fd5dab | 128 | for(int i=0; i<1; ++i) { |
yuto17320508 | 49:6337717484fe | 129 | while(get_dist_back() < params[1].condition) {//300 |
yuto17320508 | 49:6337717484fe | 130 | straightAndInfinity(params[1].argument[0], params[1].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 131 | } |
yuto17320508 | 25:c740e6fd5dab | 132 | } |
yuto17320508 | 25:c740e6fd5dab | 133 | //段差前旋回 |
yuto17320508 | 49:6337717484fe | 134 | motor_lo.setDutyLimit(params[2].duty); |
yuto17320508 | 49:6337717484fe | 135 | motor_li.setDutyLimit(params[2].duty); |
yuto17320508 | 49:6337717484fe | 136 | if(RightOrLeft == 0) turn(params[2].argument[0]); |
yuto17320508 | 49:6337717484fe | 137 | else turn(-params[2].argument[0]); |
yuto17320508 | 25:c740e6fd5dab | 138 | case 1://段差前 |
yuto17320508 | 25:c740e6fd5dab | 139 | printf("climb!!!!!!!!!!\r\n"); |
yuto17320508 | 49:6337717484fe | 140 | |
yuto17320508 | 49:6337717484fe | 141 | motor_lo.setDutyLimit(params[3].duty); |
yuto17320508 | 49:6337717484fe | 142 | motor_li.setDutyLimit(params[3].duty); |
yuto17320508 | 38:89d2a9e6c96f | 143 | //段差乗り越え |
yuto17320508 | 49:6337717484fe | 144 | while(get_dist_forward() < params[3].condition) { |
yuto17320508 | 49:6337717484fe | 145 | if(RightOrLeft == 0) straightAndInfinity(params[3].argument[0], params[3].argument[1]); |
yuto17320508 | 49:6337717484fe | 146 | else straightAndInfinity(-params[3].argument[0], params[3].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 147 | } |
yuto17320508 | 49:6337717484fe | 148 | |
yuto17320508 | 49:6337717484fe | 149 | motor_lo.setDutyLimit(params[4].duty); |
yuto17320508 | 49:6337717484fe | 150 | motor_li.setDutyLimit(params[4].duty); |
yuto17320508 | 49:6337717484fe | 151 | if(RightOrLeft == 0) phasing(params[4].argument[0]); |
yuto17320508 | 49:6337717484fe | 152 | else phasing(-params[4].argument[0]); |
yuto17320508 | 38:89d2a9e6c96f | 153 | |
yuto17320508 | 49:6337717484fe | 154 | motor_lo.setDutyLimit(params[5].duty); |
yuto17320508 | 49:6337717484fe | 155 | motor_li.setDutyLimit(params[5].duty); |
yuto17320508 | 49:6337717484fe | 156 | for(int i= 0; i<(int)params[5].condition; ++i) straight(); |
yuto17320508 | 49:6337717484fe | 157 | |
yuto17320508 | 49:6337717484fe | 158 | motor_lo.setDutyLimit(params[6].duty); |
yuto17320508 | 49:6337717484fe | 159 | motor_li.setDutyLimit(params[6].duty); |
yuto17320508 | 49:6337717484fe | 160 | while(get_dist_back() > params[6].condition) straight(); |
yuto17320508 | 49:6337717484fe | 161 | |
yuto17320508 | 25:c740e6fd5dab | 162 | //段差後旋回 |
yuto17320508 | 49:6337717484fe | 163 | motor_lo.setDutyLimit(params[7].duty); |
yuto17320508 | 49:6337717484fe | 164 | motor_li.setDutyLimit(params[7].duty); |
yuto17320508 | 49:6337717484fe | 165 | if(RightOrLeft == 0) turn(params[7].argument[0]); |
yuto17320508 | 49:6337717484fe | 166 | else turn(-params[7].argument[0]); |
yuto17320508 | 38:89d2a9e6c96f | 167 | |
yuto17320508 | 25:c740e6fd5dab | 168 | case 2://段差直後 |
yuto17320508 | 25:c740e6fd5dab | 169 | printf("go lope!!!!!!!!!!\r\n"); |
yuto17320508 | 25:c740e6fd5dab | 170 | //前進 |
yuto17320508 | 49:6337717484fe | 171 | motor_lo.setDutyLimit(params[8].duty); |
yuto17320508 | 49:6337717484fe | 172 | motor_li.setDutyLimit(params[8].duty); |
yuto17320508 | 49:6337717484fe | 173 | for(int i=0; i<(int)params[8].condition; ++i) { |
yuto17320508 | 49:6337717484fe | 174 | if(RightOrLeft == 0) straightAndInfinity(params[8].argument[0], params[8].argument[1]); |
yuto17320508 | 49:6337717484fe | 175 | else straightAndInfinity(-params[8].argument[0], params[8].argument[1]); |
yuto17320508 | 38:89d2a9e6c96f | 176 | } |
yuto17320508 | 49:6337717484fe | 177 | |
yuto17320508 | 49:6337717484fe | 178 | motor_lo.setDutyLimit(params[9].duty); |
yuto17320508 | 49:6337717484fe | 179 | motor_li.setDutyLimit(params[9].duty); |
yuto17320508 | 25:c740e6fd5dab | 180 | for(int i=0; i<3; ++i) { |
yuto17320508 | 49:6337717484fe | 181 | while(get_dist_forward() > params[9].condition) { |
yuto17320508 | 49:6337717484fe | 182 | if(RightOrLeft == 0) straightAndInfinity(params[9].argument[0], params[9].argument[1]); |
yuto17320508 | 49:6337717484fe | 183 | else straightAndInfinity(-params[9].argument[0], params[9].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 184 | } |
yuto17320508 | 25:c740e6fd5dab | 185 | } |
yuto17320508 | 25:c740e6fd5dab | 186 | //ロープ前旋回 |
yuto17320508 | 25:c740e6fd5dab | 187 | printf("before roop deg:%.3f\r\n",degree0); |
yuto17320508 | 49:6337717484fe | 188 | motor_lo.setDutyLimit(params[10].duty); |
yuto17320508 | 49:6337717484fe | 189 | motor_li.setDutyLimit(params[10].duty); |
yuto17320508 | 49:6337717484fe | 190 | if(RightOrLeft == 0) turn(params[10].argument[0]); |
yuto17320508 | 49:6337717484fe | 191 | else turn(-params[10].argument[0]); |
yuto17320508 | 48:d9f3ce701aca | 192 | |
yuto17320508 | 25:c740e6fd5dab | 193 | //ロープ位置ジャストまで前進 |
yuto17320508 | 49:6337717484fe | 194 | motor_lo.setDutyLimit(params[11].duty); |
yuto17320508 | 49:6337717484fe | 195 | motor_li.setDutyLimit(params[11].duty); |
yuto17320508 | 25:c740e6fd5dab | 196 | for(int i=0; i<3; ++i) { |
yuto17320508 | 49:6337717484fe | 197 | straightAndInfinity(params[11].argument[0], params[11].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 198 | } |
yuto17320508 | 25:c740e6fd5dab | 199 | for(int i=0; i<2; ++i) { |
yuto17320508 | 49:6337717484fe | 200 | while(get_dist_back() < params[11].condition) { |
yuto17320508 | 49:6337717484fe | 201 | straightAndInfinity(params[11].argument[0], params[11].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 202 | } |
yuto17320508 | 25:c740e6fd5dab | 203 | } |
yuto17320508 | 49:6337717484fe | 204 | |
yuto17320508 | 49:6337717484fe | 205 | motor_lo.setDutyLimit(params[12].duty); |
yuto17320508 | 49:6337717484fe | 206 | motor_li.setDutyLimit(params[12].duty); |
yuto17320508 | 49:6337717484fe | 207 | phasing(params[12].argument[0]); |
yuto17320508 | 49:6337717484fe | 208 | |
yuto17320508 | 25:c740e6fd5dab | 209 | //ロープ |
yuto17320508 | 49:6337717484fe | 210 | motor_lo.setDutyLimit(params[13].duty); |
yuto17320508 | 49:6337717484fe | 211 | motor_li.setDutyLimit(params[13].duty); |
yuto17320508 | 32:aee87dcaf7ca | 212 | while(switch_modes[2].read() == 0) { |
yuto17320508 | 49:6337717484fe | 213 | //straightAndInfinity(params[13].argument[0], params[13].argument[1]); |
yuto17320508 | 48:d9f3ce701aca | 214 | straight(); |
yuto17320508 | 25:c740e6fd5dab | 215 | } |
yuto17320508 | 32:aee87dcaf7ca | 216 | printf("uhai stand by ok!!!!!!!!!!\r\n"); |
yuto17320508 | 32:aee87dcaf7ca | 217 | NoHandSignal(); |
yuto17320508 | 25:c740e6fd5dab | 218 | case 3://坂 |
yuto17320508 | 32:aee87dcaf7ca | 219 | printf("last spart!!!!!!!!"); |
yuto17320508 | 38:89d2a9e6c96f | 220 | |
yuto17320508 | 32:aee87dcaf7ca | 221 | if(RightOrLeft == 0) theta0 = -degree/100.0+90; |
yuto17320508 | 32:aee87dcaf7ca | 222 | else theta0 = -degree/100.0-90; |
yuto17320508 | 49:6337717484fe | 223 | motor_lo.setDutyLimit(params[14].duty); |
yuto17320508 | 49:6337717484fe | 224 | motor_li.setDutyLimit(params[14].duty); |
yuto17320508 | 49:6337717484fe | 225 | for(int i=0; i<(int)params[14].condition; ++i) { |
yuto17320508 | 49:6337717484fe | 226 | if(RightOrLeft == 0) straightAndInfinity(params[14].argument[0], params[14].argument[1]);//straight();//climbAndInfinity(-90,5); |
yuto17320508 | 49:6337717484fe | 227 | else straightAndInfinity(-params[14].argument[0], params[14].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 228 | } |
yuto17320508 | 25:c740e6fd5dab | 229 | printf("wall standby"); |
yuto17320508 | 49:6337717484fe | 230 | motor_lo.setDutyLimit(params[15].duty); |
yuto17320508 | 49:6337717484fe | 231 | motor_li.setDutyLimit(params[15].duty); |
yuto17320508 | 49:6337717484fe | 232 | while(get_dist_back() < params[15].condition) { |
shimizuta | 27:d392a95f4799 | 233 | // straight(); |
yuto17320508 | 49:6337717484fe | 234 | if(RightOrLeft == 0) climbAndInfinity(params[15].argument[0], params[15].argument[1]); |
yuto17320508 | 49:6337717484fe | 235 | else climbAndInfinity(-params[15].argument[0], params[15].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 236 | } |
yuto17320508 | 49:6337717484fe | 237 | |
yuto17320508 | 25:c740e6fd5dab | 238 | for(int i=0; i<1; ++i) { |
yuto17320508 | 49:6337717484fe | 239 | while(get_dist_forward() > params[16].condition) { |
yuto17320508 | 25:c740e6fd5dab | 240 | //straight(); |
yuto17320508 | 49:6337717484fe | 241 | if(RightOrLeft == 0) climbAndInfinity(params[16].argument[0], params[16].argument[1]); |
yuto17320508 | 49:6337717484fe | 242 | else climbAndInfinity(-params[16].argument[0], params[16].argument[1]); |
yuto17320508 | 25:c740e6fd5dab | 243 | } |
yuto17320508 | 25:c740e6fd5dab | 244 | } |
yuto17320508 | 25:c740e6fd5dab | 245 | hand_mode = GOAL; |
shimizuta | 30:231e6584afe9 | 246 | stop(); |
yuto17320508 | 32:aee87dcaf7ca | 247 | printf("uhai!!!!!!!!!!!!!!!/r/n"); |
yuto17320508 | 32:aee87dcaf7ca | 248 | } |
yuto17320508 | 32:aee87dcaf7ca | 249 | } |
yuto17320508 | 32:aee87dcaf7ca | 250 | void Start() |
yuto17320508 | 32:aee87dcaf7ca | 251 | { |
yuto17320508 | 38:89d2a9e6c96f | 252 | if(hand.read()==0) { //開始時すでにスイッチが押されていた場合 |
yuto17320508 | 38:89d2a9e6c96f | 253 | |
yuto17320508 | 32:aee87dcaf7ca | 254 | SetMode(); |
yuto17320508 | 35:04699b49c463 | 255 | hand_mode = G_CLOSE; |
yuto17320508 | 32:aee87dcaf7ca | 256 | NoHandSignal(); |
yuto17320508 | 38:89d2a9e6c96f | 257 | } else { |
yuto17320508 | 32:aee87dcaf7ca | 258 | SetMode(); |
yuto17320508 | 35:04699b49c463 | 259 | hand_mode = G_OPEN; |
yuto17320508 | 35:04699b49c463 | 260 | stop();//ここで開くことをcanでslaveに送る |
yuto17320508 | 48:d9f3ce701aca | 261 | wait(1); |
yuto17320508 | 32:aee87dcaf7ca | 262 | wait_gerege(); |
yuto17320508 | 35:04699b49c463 | 263 | hand_mode = G_CLOSE; |
yuto17320508 | 32:aee87dcaf7ca | 264 | HandMove(); |
yuto17320508 | 32:aee87dcaf7ca | 265 | wait(0.5); |
yuto17320508 | 38:89d2a9e6c96f | 266 | } |
yuto17320508 | 32:aee87dcaf7ca | 267 | } |
yuto17320508 | 32:aee87dcaf7ca | 268 | void SetMode() |
yuto17320508 | 32:aee87dcaf7ca | 269 | { |
yuto17320508 | 38:89d2a9e6c96f | 270 | while(get_dist_back() > 50.0) { |
yuto17320508 | 32:aee87dcaf7ca | 271 | led1 = led2 = led3 = led4 = 0; |
yuto17320508 | 32:aee87dcaf7ca | 272 | if(switch_modes[2].read()) start_state=3; |
yuto17320508 | 32:aee87dcaf7ca | 273 | else if(switch_modes[1].read()) start_state=2; |
yuto17320508 | 32:aee87dcaf7ca | 274 | else if(switch_modes[0].read()) start_state=1; |
yuto17320508 | 32:aee87dcaf7ca | 275 | else start_state=0; |
yuto17320508 | 38:89d2a9e6c96f | 276 | |
yuto17320508 | 38:89d2a9e6c96f | 277 | if(switch_LR.read()) RightOrLeft = 1; |
yuto17320508 | 38:89d2a9e6c96f | 278 | else RightOrLeft = 0; |
yuto17320508 | 38:89d2a9e6c96f | 279 | |
yuto17320508 | 32:aee87dcaf7ca | 280 | if(start_state==0)led4 = 1; |
yuto17320508 | 32:aee87dcaf7ca | 281 | else if(start_state==1)led3 = 1; |
yuto17320508 | 32:aee87dcaf7ca | 282 | else if(start_state==2)led2 = 1; |
yuto17320508 | 32:aee87dcaf7ca | 283 | else if(start_state==3)led1 = 1; |
yuto17320508 | 38:89d2a9e6c96f | 284 | |
yuto17320508 | 32:aee87dcaf7ca | 285 | } |
yuto17320508 | 32:aee87dcaf7ca | 286 | printf("mode is %d RightOrLeft is %d \r\n", start_state, RightOrLeft); |
yuto17320508 | 32:aee87dcaf7ca | 287 | led1 = led2 = led3 = led4 = 1; |
yuto17320508 | 32:aee87dcaf7ca | 288 | } |
yuto17320508 | 32:aee87dcaf7ca | 289 | void NoHandSignal() |
yuto17320508 | 32:aee87dcaf7ca | 290 | { |
yuto17320508 | 38:89d2a9e6c96f | 291 | while(get_dist_back() > 40.0) { |
yuto17320508 | 32:aee87dcaf7ca | 292 | wait(0.01); |
yuto17320508 | 32:aee87dcaf7ca | 293 | } |
yuto17320508 | 38:89d2a9e6c96f | 294 | while(get_dist_back() < 40.0) { |
yuto17320508 | 32:aee87dcaf7ca | 295 | wait(0.01); |
shimizuta | 22:0ed9de464f40 | 296 | } |
yuto17320508 | 48:d9f3ce701aca | 297 | } |
yuto17320508 | 48:d9f3ce701aca | 298 | void LoadParameter() |
yuto17320508 | 48:d9f3ce701aca | 299 | { |
yuto17320508 | 48:d9f3ce701aca | 300 | FILE *fp; |
yuto17320508 | 48:d9f3ce701aca | 301 | if ((fp = fopen("/Local/params.csv", "r")) == NULL) {//ファイル操作はじめかつエラー処理 |
yuto17320508 | 48:d9f3ce701aca | 302 | printf("file open error!!\n"); |
yuto17320508 | 48:d9f3ce701aca | 303 | exit(EXIT_FAILURE); |
yuto17320508 | 48:d9f3ce701aca | 304 | } |
yuto17320508 | 48:d9f3ce701aca | 305 | //以下ファイル操作の中身 |
yuto17320508 | 48:d9f3ce701aca | 306 | int i; |
yuto17320508 | 48:d9f3ce701aca | 307 | while (fscanf(fp, "%f,%f,%f,%f", ¶ms[i].argument[0], ¶ms[i].argument[1], ¶ms[i].duty,¶ms[i].condition) != EOF) { |
yuto17320508 | 49:6337717484fe | 308 | printf("%f,%f,%f,%f\r\n",params[i].argument[0],params[i].argument[1],params[i].duty,params[i].condition); |
yuto17320508 | 48:d9f3ce701aca | 309 | i++; |
yuto17320508 | 48:d9f3ce701aca | 310 | } |
yuto17320508 | 48:d9f3ce701aca | 311 | fclose(fp);//ファイル操作終わり |
shimizuta | 22:0ed9de464f40 | 312 | } |