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.
Revision 31:9d973398554f, committed 2018-06-28
- Comitter:
- jasminealice
- Date:
- Thu Jun 28 15:08:41 2018 +0000
- Parent:
- 30:63a8a5cefc6b
- Commit message:
- Fiiinal!!
Changed in this revision
--- a/Detector.cpp Mon Jun 25 14:57:17 2018 +0000 +++ b/Detector.cpp Thu Jun 28 15:08:41 2018 +0000 @@ -3,7 +3,7 @@ Detector::Detector(bool setValue): lcd(p22, p21, p23, p24, p25, p26) { - for(int i = 0; i < 14; i++) + for(int i = 0; i < 16; i++) detector.push_back(setValue); } @@ -31,7 +31,7 @@ } void Detector::showReservation(){ lcd.printf("Res:"); - for(int i = 0; i<14; i++){ + for(int i = 0; i<16; i++){ if(detector.at(i)) lcd.printf("%d ", i); }
--- a/Switch.cpp Mon Jun 25 14:57:17 2018 +0000 +++ b/Switch.cpp Thu Jun 28 15:08:41 2018 +0000 @@ -5,12 +5,12 @@ //ctor address = newaddress; inst = newinst; - nrPacket = 20; + nrPacket = 40; if(inst == 0x82) nrPacket = 50; if(inst == 0x84)// || inst == 0x81) switchOn(); - else + //else switchOff(); }
--- a/Train.cpp Mon Jun 25 14:57:17 2018 +0000 +++ b/Train.cpp Thu Jun 28 15:08:41 2018 +0000 @@ -100,7 +100,7 @@ return true; break; case 7: - if(position == 8 || position == 6 || position == 7) + if(position == 8 || position == 6 || position == 7 || position == 9) return true; break; case 8:
--- a/main.cpp Mon Jun 25 14:57:17 2018 +0000 +++ b/main.cpp Thu Jun 28 15:08:41 2018 +0000 @@ -57,7 +57,7 @@ static const int cRight[] = {6,7,8}; vector<int> C_right (cRight, cRight + sizeof(cRight) / sizeof(cRight[0]) ); -static const int cLeft[] = {0,1,2,12,13}; +static const int cLeft[] = {0,1,2,12,13,14,15}; vector<int> C_left (cLeft, cLeft + sizeof(cLeft) / sizeof(cLeft[0]) ); static const int junction39[] = {3,9}; @@ -85,6 +85,7 @@ void init_mcp(); void init_interrupt(); void init_trains(); +void endFunction(); void executeCase(int pos, Train* currTrain); Train& assignTrain(int pos); @@ -142,21 +143,7 @@ } } - lcd.printf("Shutting down..."); - bool in = true; - while(in){ - redTrain.sendCommand(); - silverTrain.sendCommand(); - externalLed2 = 1; - // wait(0.2); - //externalLed2 = 0; - buzz = 1; - if(!readSwitch(sw3)){ - in = false; - } - - } - buzz = 0; + endFunction(); return 0; } @@ -199,6 +186,26 @@ return newPos; } +void endFunction(){ + + lcd.printf("Shutting down..."); + bool in = true; + while(in){ + redTrain.sendCommand(); + silverTrain.sendCommand(); + externalLed2 = 1; + // wait(0.2); + //externalLed2 = 0; + buzz = 1; + if(!readSwitch(sw4)){ + in = false; + } + + } + externalLed2 = 0; + buzz = 0; +} + Train& assignTrain(int pos){ //Check which train got the interupt @@ -218,35 +225,35 @@ lcd.cls(); lcd.printf("NO TRAIN ASSIGNED"); lcd.printf("%d", pos); + silverTrain.Stop(); redTrain.Stop(); - switch2.switchOff(); + endFunction(); } } void executeCase(int pos, Train* currTrain){ lcd.cls(); + lcd.printf("At "); + lcd.printf("%d", pos); switch(pos){ case 0:{ - lcd.printf("at 0"); currTrain->changeSpeed(currTrain->normalSpeed()); break;} case 1:{ - lcd.printf("at 1"); //TO DO: Check which train is going and only slow down if it started from 2 /*if(!currTrain->isClockwise()){ currTrain->changeSpeed(slow_speed);//Slow down lcd.printf("slow down"); }*/ //else - currTrain->changeSpeed(currTrain->normalSpeed()); + currTrain->changeSpeed(currTrain->slowlySpeed()); break;} case 2:{ /* Stop everytime at 2 */ - lcd.printf("at 2"); dect.showReservation(); if(!dect.checkReservation(10) && !dect.checkReservation(11)){ currTrain->Stop(); @@ -275,15 +282,12 @@ currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward } break;} - case 3:{ - lcd.printf("at 3"); - - + case 3:{ switch2.switchOff(); //Disable switch2 dect.clearReservation(C_left); //free nr 0,1,2,12,13 if(!dect.checkReservation(5)){ currTrain->changeDirection(); //change direction - currTrain->changeSpeed(currTrain->normalSpeed()); //go forward + currTrain->changeSpeed(currTrain->slowlySpeed()); //go forward } else{ currTrain->Stop(); @@ -291,11 +295,15 @@ break; } case 4:{ - lcd.printf("At 4"); dect.clearReservation(C_left); //free nr 0,1,2,12,13 switch3.switchOn(); //Turn on switch3 dect.showReservation(); - if(dect.checkReservation(6)){ //Check if 6 is reserved + if(currTrain->isClockwise()){ + lcd.printf("Switch 3 not activated"); + redTrain.Stop(); + silverTrain.Stop(); + } + else if(dect.checkReservation(6)){ //Check if 6 is reserved currTrain->Stop(); //IF yes STOP } else{ @@ -305,8 +313,7 @@ break; } case 5:{ - lcd.printf("at 5"); - + dect.makeReservation(junction_511); switch3.switchOn(); //Enable switch3 dect.clearReservation(C_right); //free nr 6,7,8 @@ -320,7 +327,6 @@ break; } case 6:{ - lcd.printf("At 6"); if(!currTrain->isClockwise()) //IF CC goes towards 7 { switch3.switchOn(); //Enable switch3 @@ -342,12 +348,10 @@ } break; } - case 7:{ - lcd.printf("At 7"); - currTrain->changeSpeed(currTrain->normalSpeed()); + case 7:{ + currTrain->changeSpeed(currTrain->slowlySpeed()); break;} - case 8:{ - lcd.printf("At 8"); + case 8:{ if(currTrain->isClockwise()) //IF C goes towards 7 { switch4.switchOff(); //Disable switch4 @@ -365,9 +369,13 @@ } break; } - case 9:{ - lcd.printf("at 9"); - if(!dect.checkReservation(8)){ + case 9:{ + if(!currTrain->isClockwise()){ + lcd.printf("Switch 4 is activated"); + redTrain.Stop(); + silverTrain.Stop(); + } + else if(!dect.checkReservation(8)){ switch4.switchOn(); //Enable switch4 dect.makeReservation(C_right); //Reserve 6,7,8 currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward @@ -379,9 +387,8 @@ } break; } - case 10:{ - lcd.printf("At 10"); - + case 10:{ + dect.makeReservation(lane_10); dect.clearReservation(C_right); //free nr 6, 7, 8, 9 if(dect.checkReservation(12)){ //Check if 12 is reserved currTrain->Stop(); //IF yes STOP @@ -394,9 +401,9 @@ break; } - case 11:{ - lcd.printf("at 11"); - + case 11:{ + dect.makeReservation(junction_511); + dect.showReservation(); if(!dect.checkReservation(12)){ switch1.switchOn(); //Enable switch1 @@ -408,30 +415,27 @@ } break; } - case 12: { - lcd.printf("at 12"); + case 12: { switch1.switchOff(); //Turn of switch1 //int arr2 [3] = {5,10,11}; //vector<int> detectors2(arr2, arr2 + sizeof(arr2) / sizeof(int)); dect.clearReservation(lane_10); //free nr 5, 10, 11 dect.clearReservation(junction_511); + dect.makeReservation(C_left); currTrain->changeSpeed(currTrain->normalSpeed()); //Move forward break; } case 13: { - lcd.printf("at 13"); currTrain->changeSpeed(currTrain->normalSpeed()); break; } - case 14:{ - lcd.printf("at 21"); + case 14:{ currTrain->changeSpeed(currTrain->slowlySpeed()); break; } case 15:{ - lcd.printf("at 22"); - currTrain->changeSpeed(currTrain->normalSpeed()); + currTrain->changeSpeed(currTrain->slowlySpeed()); break; } default: { @@ -459,13 +463,15 @@ pos = mcp->_read(INTCAPB); pos = convertHextoDec(pos, 1); } - else + else{ //PROBLEM lcd.printf("Fail to detect int"); - if(pos!=7){ - Train* currTrain = &assignTrain(pos); - executeCase(pos, currTrain); + return; } + + Train* currTrain = &assignTrain(pos); + executeCase(pos, currTrain); + } bool readSwitch(DigitalIn theSwitch){