a

Dependencies:   Servo ServoArm mbed

Fork of PES_Official-TestF by zhaw_st16b_pes2_10

Committer:
EpicG10
Date:
Wed May 10 19:53:08 2017 +0000
Revision:
14:b61fbd13a7c9
Parent:
13:6c1f8e35b242
Child:
15:915f8839fe48
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
beacon 0:d267b248eff4 1 #include "mbed.h"
beacon 0:d267b248eff4 2 #include "Robot.h"
beacon 4:67d7177c213f 3 #include "Declarations.h"
beacon 0:d267b248eff4 4
beacon 0:d267b248eff4 5 #include <cstdlib>
beacon 0:d267b248eff4 6
beacon 4:67d7177c213f 7 //DistanceSensors related bottom:
beacon 0:d267b248eff4 8 Serial pc(SERIAL_TX, SERIAL_RX);
beacon 0:d267b248eff4 9
beacon 0:d267b248eff4 10 AnalogIn sensorVoltage(PB_1);
beacon 0:d267b248eff4 11 DigitalOut enable(PC_1);
beacon 0:d267b248eff4 12 DigitalOut bit0(PH_1);
beacon 0:d267b248eff4 13 DigitalOut bit1(PC_2);
beacon 0:d267b248eff4 14 DigitalOut bit2(PC_3);
beacon 1:388c915756f5 15
beacon 4:67d7177c213f 16 //DistanceSensors top:
beacon 4:67d7177c213f 17 AnalogIn frontS(A1);
beacon 4:67d7177c213f 18 AnalogIn leftS(A2);
beacon 4:67d7177c213f 19 AnalogIn rightS(A3);
beacon 4:67d7177c213f 20
beacon 1:388c915756f5 21 //Leds related:
beacon 1:388c915756f5 22 DigitalOut leds[6] = { PC_8, PC_6, PB_12, PA_7, PC_0, PC_9 };
beacon 0:d267b248eff4 23
beacon 1:388c915756f5 24 //motor related:
beacon 1:388c915756f5 25 PwmOut left(PA_8);
beacon 1:388c915756f5 26 PwmOut right(PA_9);
beacon 0:d267b248eff4 27
beacon 1:388c915756f5 28 DigitalOut powerSignal(PB_2);
beacon 10:f76476943a6c 29 DigitalIn errorMotor(PB_14);
beacon 1:388c915756f5 30 DigitalIn overtemperatur(PB_15);
beacon 1:388c915756f5 31
beacon 4:67d7177c213f 32 //Arm:
beacon 10:f76476943a6c 33 ServoArm servoArm(PA_6);
beacon 10:f76476943a6c 34
beacon 10:f76476943a6c 35 //Greifer:
beacon 12:c0bcb95885dd 36 Servo servoGreifer(PC_7);
beacon 4:67d7177c213f 37
EpicG10 14:b61fbd13a7c9 38 //Leiste:
EpicG10 14:b61fbd13a7c9 39 Servo servoLeiste(PB_7);
EpicG10 14:b61fbd13a7c9 40
beacon 1:388c915756f5 41 //Farbsensor:
beacon 1:388c915756f5 42 AnalogIn FarbVoltage(A0);
beacon 12:c0bcb95885dd 43 DigitalOut led(D2);
beacon 1:388c915756f5 44
beacon 10:f76476943a6c 45 Robot sam( &left, &right, &powerSignal, leds, &FarbVoltage, &frontS, &leftS, &rightS, &servoArm, &servoGreifer ); //Implement the Farbsensor into the Robot init function!!
beacon 10:f76476943a6c 46
beacon 11:292bdbd85a9c 47 void initializeDistanceSensors()
beacon 11:292bdbd85a9c 48 {
beacon 10:f76476943a6c 49 for( int ii = 0; ii<9; ++ii) {
beacon 10:f76476943a6c 50 sam.sensors[ii].init(&sensorVoltage, &frontS, &leftS, &rightS, &bit0, &bit1, &bit2, ii);
beacon 10:f76476943a6c 51
beacon 11:292bdbd85a9c 52 enable = 1;
beacon 10:f76476943a6c 53 }
beacon 10:f76476943a6c 54 }
beacon 1:388c915756f5 55
beacon 0:d267b248eff4 56
beacon 10:f76476943a6c 57 /* */
beacon 11:292bdbd85a9c 58 int main()
beacon 11:292bdbd85a9c 59 {
beacon 4:67d7177c213f 60 initializeDistanceSensors(); //Initialises IR-Sensors.
beacon 11:292bdbd85a9c 61 //int counter = 0; //Counts how many times the robot has turned, before driving
beacon 4:67d7177c213f 62 int timer = 0; //Is used, to reset the robot. Returns time in [0.1s]
beacon 4:67d7177c213f 63 //int lastFun = -1; //Is used, to check if the same action in Robot::search() was made multiple times.
beacon 11:292bdbd85a9c 64 //int found = 0; //0:= no block available, 1 := a lego is ready to be picked up
beacon 11:292bdbd85a9c 65 //int done = 0;
beacon 11:292bdbd85a9c 66
beacon 11:292bdbd85a9c 67 enum states { search = 0, forward, downward, down, upward, color, backwardDrop, readyDrop, backward };
beacon 11:292bdbd85a9c 68
EpicG10 13:6c1f8e35b242 69 int state = search;
beacon 11:292bdbd85a9c 70
beacon 11:292bdbd85a9c 71 while( 1 ) {
beacon 10:f76476943a6c 72
beacon 11:292bdbd85a9c 73 if ( timer > TIMEOUT ) {
beacon 4:67d7177c213f 74 NVIC_SystemReset(); //Resets Sam.
beacon 4:67d7177c213f 75 }
beacon 11:292bdbd85a9c 76
beacon 11:292bdbd85a9c 77 switch( state ) {
beacon 11:292bdbd85a9c 78 case search:
EpicG10 13:6c1f8e35b242 79 if( 1 || sam.search(&timer) ){
beacon 11:292bdbd85a9c 80 state = forward;
beacon 11:292bdbd85a9c 81 timer = 0;
beacon 11:292bdbd85a9c 82 }
beacon 11:292bdbd85a9c 83
beacon 11:292bdbd85a9c 84 break;
beacon 11:292bdbd85a9c 85
beacon 11:292bdbd85a9c 86 case forward:
beacon 11:292bdbd85a9c 87 if( sam.Arm.backToCollect() ){
beacon 11:292bdbd85a9c 88 state = downward;
beacon 11:292bdbd85a9c 89 timer = 0;
beacon 11:292bdbd85a9c 90 }
beacon 11:292bdbd85a9c 91
beacon 11:292bdbd85a9c 92 break;
beacon 11:292bdbd85a9c 93
beacon 11:292bdbd85a9c 94 case downward:
beacon 11:292bdbd85a9c 95 if( sam.Arm.collectToDown() ){
beacon 11:292bdbd85a9c 96 state = down;
beacon 11:292bdbd85a9c 97 timer = 0;
beacon 11:292bdbd85a9c 98 }
beacon 11:292bdbd85a9c 99
beacon 11:292bdbd85a9c 100 break;
beacon 11:292bdbd85a9c 101
beacon 11:292bdbd85a9c 102 case down:
beacon 11:292bdbd85a9c 103 if( sam.Greifer.take() ) {
beacon 11:292bdbd85a9c 104 state = upward;
beacon 11:292bdbd85a9c 105 timer = 0;
beacon 11:292bdbd85a9c 106 }
beacon 11:292bdbd85a9c 107
beacon 11:292bdbd85a9c 108 break;
beacon 11:292bdbd85a9c 109
beacon 11:292bdbd85a9c 110 case upward:
beacon 11:292bdbd85a9c 111 if( sam.Arm.downToCollect() ){
beacon 11:292bdbd85a9c 112 state = color;
beacon 11:292bdbd85a9c 113 timer = 0;
beacon 11:292bdbd85a9c 114 }
beacon 11:292bdbd85a9c 115
beacon 11:292bdbd85a9c 116 break;
beacon 11:292bdbd85a9c 117
beacon 11:292bdbd85a9c 118 case color: {
beacon 12:c0bcb95885dd 119 led = 1;
beacon 11:292bdbd85a9c 120 int color = sam.FarbVoltage.read();
beacon 11:292bdbd85a9c 121
beacon 12:c0bcb95885dd 122 if( color == -1 ){
beacon 11:292bdbd85a9c 123 //Do nothing
beacon 11:292bdbd85a9c 124 }
beacon 11:292bdbd85a9c 125
beacon 12:c0bcb95885dd 126
beacon 11:292bdbd85a9c 127 else if( color == 0 || color == GREEN ){
beacon 11:292bdbd85a9c 128 state = backwardDrop;
beacon 12:c0bcb95885dd 129 led = 0;
beacon 11:292bdbd85a9c 130 timer = 0;
beacon 11:292bdbd85a9c 131 }
beacon 11:292bdbd85a9c 132
beacon 11:292bdbd85a9c 133 else if( color == RED ){
beacon 11:292bdbd85a9c 134 state = readyDrop;
beacon 12:c0bcb95885dd 135 led = 0;
beacon 11:292bdbd85a9c 136 timer = 0;
beacon 11:292bdbd85a9c 137 }
beacon 11:292bdbd85a9c 138
beacon 11:292bdbd85a9c 139 else{
beacon 11:292bdbd85a9c 140 //Shit...
beacon 11:292bdbd85a9c 141 }
beacon 11:292bdbd85a9c 142 break;
beacon 11:292bdbd85a9c 143 }
beacon 11:292bdbd85a9c 144
beacon 11:292bdbd85a9c 145 case backwardDrop:
beacon 11:292bdbd85a9c 146 if( sam.Arm.collectToBack() ){
beacon 11:292bdbd85a9c 147 state = readyDrop;
beacon 11:292bdbd85a9c 148 timer = 0;
beacon 11:292bdbd85a9c 149 }
beacon 11:292bdbd85a9c 150
beacon 11:292bdbd85a9c 151 break;
beacon 11:292bdbd85a9c 152
beacon 11:292bdbd85a9c 153 case readyDrop:
beacon 11:292bdbd85a9c 154 if( sam.Greifer.leave() ){
beacon 11:292bdbd85a9c 155 state = backward;
beacon 11:292bdbd85a9c 156 timer = 0;
beacon 11:292bdbd85a9c 157 }
beacon 11:292bdbd85a9c 158
beacon 11:292bdbd85a9c 159 break;
beacon 11:292bdbd85a9c 160
beacon 11:292bdbd85a9c 161 case backward:
beacon 11:292bdbd85a9c 162 if( sam.Arm.collectToBack() ){
EpicG10 13:6c1f8e35b242 163 state = search;
beacon 11:292bdbd85a9c 164 timer = 0;
beacon 11:292bdbd85a9c 165 }
beacon 11:292bdbd85a9c 166
beacon 11:292bdbd85a9c 167 break;
beacon 4:67d7177c213f 168 }
beacon 1:388c915756f5 169
beacon 11:292bdbd85a9c 170 timer++;
beacon 11:292bdbd85a9c 171 wait(0.1f);
beacon 11:292bdbd85a9c 172 }
beacon 11:292bdbd85a9c 173
beacon 11:292bdbd85a9c 174 return 0;
beacon 11:292bdbd85a9c 175 }
beacon 11:292bdbd85a9c 176
beacon 11:292bdbd85a9c 177
beacon 11:292bdbd85a9c 178
beacon 11:292bdbd85a9c 179 /*
beacon 11:292bdbd85a9c 180 if (sam.search(&counter, &timer)) {
beacon 11:292bdbd85a9c 181
beacon 11:292bdbd85a9c 182 while(!done) {
beacon 11:292bdbd85a9c 183 sam.Arm.collectToDown(&done);
beacon 11:292bdbd85a9c 184 wait(0.1f);
beacon 11:292bdbd85a9c 185 }
beacon 11:292bdbd85a9c 186 done = 0;
beacon 11:292bdbd85a9c 187
beacon 11:292bdbd85a9c 188 sam.Greifer.take();
beacon 11:292bdbd85a9c 189
beacon 11:292bdbd85a9c 190 while(!done) {
beacon 11:292bdbd85a9c 191 sam.Arm.downToCollect(&done);
beacon 11:292bdbd85a9c 192 sam.leds[1] = 1;
beacon 11:292bdbd85a9c 193 wait(0.1f);
beacon 11:292bdbd85a9c 194 }
beacon 11:292bdbd85a9c 195 done = 0;
beacon 11:292bdbd85a9c 196
beacon 11:292bdbd85a9c 197 sam.Greifer.leave();
beacon 11:292bdbd85a9c 198
beacon 11:292bdbd85a9c 199 found = 0;
beacon 11:292bdbd85a9c 200 }
beacon 11:292bdbd85a9c 201
beacon 11:292bdbd85a9c 202
beacon 1:388c915756f5 203 wait( 0.1f );
beacon 0:d267b248eff4 204 }
beacon 0:d267b248eff4 205 return 0;
beacon 4:67d7177c213f 206 }
beacon 11:292bdbd85a9c 207 */
beacon 4:67d7177c213f 208
beacon 4:67d7177c213f 209 /* * /
beacon 4:67d7177c213f 210 int main(){
beacon 11:292bdbd85a9c 211
beacon 4:67d7177c213f 212 initializeDistanceSensors();
beacon 4:67d7177c213f 213 sam.stop();
beacon 11:292bdbd85a9c 214
beacon 4:67d7177c213f 215 while ( 1 ){
beacon 4:67d7177c213f 216 for (int i=0; i<6; i++){
beacon 4:67d7177c213f 217 sam.sensors[i] < NEAR ? sam.leds[i] = 1 : sam.leds[i] = 0;
beacon 4:67d7177c213f 218 }
beacon 11:292bdbd85a9c 219
beacon 4:67d7177c213f 220 sam.turnLeftS();
beacon 11:292bdbd85a9c 221
beacon 4:67d7177c213f 222 while (sam.sensors[FWD] < NEAR){
beacon 4:67d7177c213f 223 wait(0.05f);
beacon 4:67d7177c213f 224 sam.stop();
beacon 4:67d7177c213f 225 }
beacon 11:292bdbd85a9c 226
beacon 4:67d7177c213f 227 }
beacon 4:67d7177c213f 228 return 0;
beacon 4:67d7177c213f 229 }
beacon 4:67d7177c213f 230 /* */
beacon 4:67d7177c213f 231
beacon 4:67d7177c213f 232 /* * /
beacon 4:67d7177c213f 233 int main(){
beacon 4:67d7177c213f 234 for(float p=0; p<1.0; p += 0.1) {
beacon 4:67d7177c213f 235 // arm = p;
beacon 4:67d7177c213f 236 wait(0.2);
beacon 4:67d7177c213f 237 }
beacon 4:67d7177c213f 238 }
beacon 6:ba26dd3251b3 239 /* */
beacon 6:ba26dd3251b3 240
beacon 10:f76476943a6c 241 /* * /
beacon 6:ba26dd3251b3 242 int main(){
beacon 6:ba26dd3251b3 243 sam.stop();
beacon 6:ba26dd3251b3 244 int done = 0; //1:= finished process; 0:= not finished
beacon 6:ba26dd3251b3 245 int fun = 0; //just to test.
beacon 11:292bdbd85a9c 246 int start = 0;
beacon 11:292bdbd85a9c 247
beacon 11:292bdbd85a9c 248
beacon 6:ba26dd3251b3 249 while(1){
beacon 6:ba26dd3251b3 250 if(fun == 0){
beacon 6:ba26dd3251b3 251 done = 0;
beacon 6:ba26dd3251b3 252 sam.Arm.collecttoback(&done);
beacon 11:292bdbd85a9c 253 done == 0 ? fun = 0 : fun = 1;
beacon 6:ba26dd3251b3 254 }
beacon 6:ba26dd3251b3 255 else if(fun == 1){
beacon 6:ba26dd3251b3 256 done = 0;
beacon 6:ba26dd3251b3 257 sam.Arm.backtocollect(&done);
beacon 6:ba26dd3251b3 258 done == 0 ? fun = 1 : fun = 2;
beacon 6:ba26dd3251b3 259 }
beacon 6:ba26dd3251b3 260 else if(fun == 2){
beacon 6:ba26dd3251b3 261 done = 0;
beacon 6:ba26dd3251b3 262 sam.Arm.collecttodown(&done);
beacon 6:ba26dd3251b3 263 done == 0 ? fun = 2 : fun = 3;
beacon 6:ba26dd3251b3 264 }
beacon 6:ba26dd3251b3 265 else if(fun == 3){
beacon 6:ba26dd3251b3 266 done = 0;
beacon 6:ba26dd3251b3 267 sam.Arm.downtocollect(&done);
beacon 6:ba26dd3251b3 268 done == 0 ? fun = 3 : fun = 0;
beacon 6:ba26dd3251b3 269 }
beacon 6:ba26dd3251b3 270 wait(0.1);
beacon 6:ba26dd3251b3 271 }
beacon 10:f76476943a6c 272 }
beacon 10:f76476943a6c 273
beacon 10:f76476943a6c 274 */