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.
Diff: main.cpp
- Revision:
- 28:1430685f4d12
- Parent:
- 27:9f9cd0df9a79
- Child:
- 29:6031227dcac9
--- a/main.cpp Wed Jun 20 14:38:20 2018 +0000
+++ b/main.cpp Thu Jun 21 13:42:31 2018 +0000
@@ -38,7 +38,7 @@
//move backwards/reverse
//speed dial forward
-const unsigned int slow_speed = 0x73; //step 4
+const unsigned int slow_speed = 0x74; //step 4
//const unsigned int DCCinst_step6 = 0x68; //step 6 1/4 speed
const unsigned int normal_speed = 0x78; //step 13 1/2 speed
@@ -63,7 +63,7 @@
static const int junction511[] = {5,11};
vector<int> junction_511 (junction511, junction511 + sizeof(junction511) / sizeof(junction511[0]) );
-int redStartVal = 12;
+int redStartVal = 10;
int silverStartVal = 2;
/*----------------------------------------------------------------------------
@@ -79,8 +79,8 @@
Train& assignTrain(int pos);
//Trains
-Train redTrain(DCCaddress_red, normal_speed, redStartVal, high_speed);
-Train silverTrain(DCCaddress_silver,normal_speed, silverStartVal, normal_speed);
+Train redTrain(DCCaddress_red, normal_speed, redStartVal, high_speed, normal_speed);
+Train silverTrain(DCCaddress_silver,normal_speed, silverStartVal, normal_speed, slow_speed);
//Switches
Switch switch1(DCCaddress_switch,DCCinst_switch1);
Switch switch2(DCCaddress_switch,DCCinst_switch2);
@@ -102,21 +102,24 @@
silverTrain.sendCommand();
if(!readSwitch(sw3)){ //Change speed
+ lcd.cls();
lcd.printf("Go forward");
- redTrain.changeSpeed(normal_speed);
+ redTrain.changeSpeed(high_speed);
silverTrain.changeSpeed(normal_speed);
}
if(redTrain.checkStop()){ //check if Train stopped
+ lcd.cls();
+ lcd.printf("%d", redTrain.getPosition());
executeCase(redTrain.getPosition(), &redTrain);
- wait(5);
}
else if(silverTrain.checkStop()){
executeCase(silverTrain.getPosition(), &silverTrain);
- wait(5);
}
if(redTrain.checkStop() && silverTrain.checkStop()) {
+ lcd.cls();
+ lcd.printf("Stop loop...");
break;
}
}
@@ -176,9 +179,15 @@
else if(silverTrain.checkInterupt(pos) && !silverTrain.checkStop()){
silverTrain.setPosition(pos);
return silverTrain;
- }else{
+ }else if(redTrain.checkInterupt(pos) && redTrain.checkStop()){
+ return redTrain;
+ }else if(silverTrain.checkInterupt(pos) && silverTrain.checkStop()){
+ return silverTrain;
+ }
+ else{
lcd.cls();
lcd.printf("NO TRAIN ASSIGNED");
+ lcd.printf("%d", pos);
silverTrain.Stop();
redTrain.Stop();
switch2.switchOff();
@@ -187,8 +196,7 @@
}
void executeCase(int pos, Train* currTrain){
-
-
+ lcd.cls();
switch(pos){
case 0:{
lcd.printf("at 0");
@@ -210,48 +218,61 @@
Stop everytime at 2
*/
lcd.printf("at 2");
-
- if(!dect.checkReservation(4) && !dect.checkReservation(3)){ //Check if 4 or 3 is reserved
- lcd.cls();
- lcd.printf("none is reserved");
- int v1 = rand() % 100; //IF NOT randomize which way to go
- if (v1 < 25){ //0.25 chance to enable the switch2, reserve 3,9
- switch2.switchOn();
+ /*if(!dect.checkReservation(10) && !dect.checkReservation(11)){
+
+ currTrain->Stop();
+ lcd.printf("Stopping at 2");
+ }
+ else{ */
+
+ if(!dect.checkReservation(4) && !dect.checkReservation(3)){ //Check if 4 or 3 is reserved
+ lcd.cls();
+ lcd.printf("none is reserved");
+ int v1 = rand() % 100; //IF NOT randomize which way to go
+ if (v1 < 50){ //0.25 chance to enable the switch2, reserve 3,9
+ switch2.switchOn();
+ dect.makeReservation(junction_39);
+ }
+ else { //0.75 chance to disable switch2, reserve 4
+ switch2.switchOff();
+ vector<int> detectors(4);
+ dect.makeReservation(detectors);
+ }
+ }else if(dect.checkReservation(4)){ //IF 4 is reserved
+ switch2.switchOn(); //Enable switch2, reserve 3,9
+ lcd.cls();
+ lcd.printf("4 is reserved");
dect.makeReservation(junction_39);
- }
- else { //0.75 chance to disable switch2, reserve 4
- switch2.switchOff();
- vector<int> detectors(4);
- dect.makeReservation(detectors);
- }
- }else if(dect.checkReservation(4)){ //IF 4 is reserved
- switch2.switchOn(); //Enable switch2, reserve 3,9
- lcd.cls();
- lcd.printf("4 is reserved");
- dect.makeReservation(junction_39);
-
- }else{ //IF 3 reserved
- lcd.cls();
- lcd.printf("3 is reserved");
- switch2.switchOff(); //Disable switch2, reserve 4
- vector<int> detectors(4);
- dect.makeReservation(detectors);
- }
- currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward
-
+
+ }else{ //IF 3 reserved
+ lcd.cls();
+ lcd.printf("3 is reserved");
+ switch2.switchOff(); //Disable switch2, reserve 4
+ vector<int> detectors(4);
+ dect.makeReservation(detectors);
+ }
+ currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward
+ //}
break;}
case 3:{
lcd.printf("at 3");
currTrain->changeDirection(); //change direction
switch2.switchOff(); //Disable switch2
- dect.clearReservation(C_left); //free nr 0,1,2,12,13
- currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
+ dect.clearReservation(C_left); //free nr 0,1,2,12,13
+ if(!dect.checkReservation(5)){
+ currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
+ }
+ else{
+ currTrain->Stop();
+ lcd.printf("5 is reserved");
+ }
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
lcd.printf("6 is reserved");
currTrain->Stop(); //IF yes STOP
@@ -268,7 +289,14 @@
currTrain->changeDirection(); //change direction
switch3.switchOn(); //Enable switch3
dect.clearReservation(C_right); //free nr 6,7,8
- currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
+
+ if(!dect.checkReservation(3)){
+ lcd.printf("3 is reserved");
+ currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
+ }
+ else{
+ currTrain->Stop();
+ }
break;}
case 6:{
@@ -284,6 +312,7 @@
else{
if(dect.checkReservation(5)){ //IF 5 is reserved
currTrain->Stop();
+ lcd.printf("5 is reserved");
}else{ //else 5 reserved
switch3.switchOff(); //Enable switch3, reserve 4
@@ -305,11 +334,16 @@
dect.clearReservation(junction_39); //Free 3,9,10
currTrain->changeSpeed(currTrain->normalSpeed()); //Move forward
}
- else{ //IF CC
- switch4.switchOff(); //Disable switch4, reserve 10
- vector<int> detectors(10);
- dect.makeReservation(detectors);
- currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward
+ else{ //IF CC if 10 is reserved stop
+ if(dect.checkReservation(10)){
+ lcd.printf("10 is reserved");
+ currTrain->Stop();
+ }else{
+ switch4.switchOff(); //Disable switch4, reserve 10
+ vector<int> detectors(10);
+ dect.makeReservation(detectors);
+ currTrain->changeSpeed(currTrain->slowlySpeed()); //Go forward
+ }
}
break;}
case 9:{
@@ -321,7 +355,7 @@
}
else{
- lcd.printf("from 9->8 : 8 reserved");
+ lcd.printf("8 is reserved");
currTrain->Stop();
}
break;}
@@ -329,13 +363,12 @@
lcd.printf("At 10");
dect.clearReservation(C_right); //free nr 6, 7, 8, 9
- switch1.switchOff(); //Turn off switch1
if(dect.checkReservation(12)){ //Check if 12 is reserved
- lcd.printf("12resv. STOP");
+ lcd.printf("12 is reserved");
currTrain->Stop(); //IF yes STOP
}
- else{
- lcd.printf("12 not reserved");
+ else{
+ switch1.switchOff(); //Turn off switch1
dect.makeReservation(C_left);
currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
}
@@ -351,7 +384,8 @@
currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
}
else{
- currTrain->Stop();
+ currTrain->Stop();
+ lcd.printf("12 is reserved");
}
break;
@@ -370,7 +404,7 @@
break;}
case 14:{
lcd.printf("at 21");
- currTrain->changeSpeed(slow_speed);
+ currTrain->changeSpeed(currTrain->slowlySpeed());
break;}
case 15:{
lcd.printf("at 22");
@@ -403,8 +437,10 @@
else
//PROBLEM
lcd.printf("Fail to detect int");
- Train* currTrain = &assignTrain(pos);
- executeCase(pos, currTrain);
+ if(pos!=7){
+ Train* currTrain = &assignTrain(pos);
+ executeCase(pos, currTrain);
+ }
}
bool readSwitch(DigitalIn theSwitch){
@@ -460,9 +496,10 @@
vector<int> res;
res.push_back(2);
//res.push_back(4);
- dect.makeReservation(res); //Run trains counterclockwise and reserve
+ dect.makeReservation(C_left); //Run trains counterclockwise and reserve
vector<int> res2;
- res2.push_back(12);
+ res2.push_back(10);
//res2.push_back(13);
dect.makeReservation(res2);
+ dect.showReservation();
}
\ No newline at end of file
