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:
- 29:6031227dcac9
- Parent:
- 28:1430685f4d12
- Child:
- 30:63a8a5cefc6b
--- a/main.cpp Thu Jun 21 13:42:31 2018 +0000
+++ b/main.cpp Fri Jun 22 09:55:58 2018 +0000
@@ -38,7 +38,7 @@
//move backwards/reverse
//speed dial forward
-const unsigned int slow_speed = 0x74; //step 4
+const unsigned int slow_speed = 0x76; //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,8 +63,14 @@
static const int junction511[] = {5,11};
vector<int> junction_511 (junction511, junction511 + sizeof(junction511) / sizeof(junction511[0]) );
+static const int lane4[] = {4};
+vector<int> lane_4 (lane4, lane4 + sizeof(lane4) / sizeof(lane4[0]) );
+
+static const int lane10[] = {10};
+vector<int> lane_10 (lane10, lane10 + sizeof(lane10) / sizeof(lane10[0]) );
+
int redStartVal = 10;
-int silverStartVal = 2;
+int silverStartVal = 15;
/*----------------------------------------------------------------------------
Function definitions
@@ -218,16 +224,13 @@
Stop everytime at 2
*/
lcd.printf("at 2");
- /*if(!dect.checkReservation(10) && !dect.checkReservation(11)){
-
+ if(!dect.checkReservation(10) && !dect.checkReservation(11)){
currTrain->Stop();
lcd.printf("Stopping at 2");
}
- else{ */
+ 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();
@@ -235,24 +238,18 @@
}
else { //0.75 chance to disable switch2, reserve 4
switch2.switchOff();
- vector<int> detectors(4);
- dect.makeReservation(detectors);
+ dect.makeReservation(lane_4);
}
}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);
+ dect.makeReservation(lane_4);
}
currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward
- //}
+ }
break;}
case 3:{
lcd.printf("at 3");
@@ -265,24 +262,23 @@
}
else{
currTrain->Stop();
- lcd.printf("5 is reserved");
}
- break;}
+ 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
}
else{
dect.makeReservation(C_right); //else reserve 6,7,8 and go forward
currTrain->changeSpeed(currTrain->normalSpeed());
}
-
- break; }
+ break;
+ }
case 5:{
lcd.printf("at 5");
@@ -291,28 +287,28 @@
dect.clearReservation(C_right); //free nr 6,7,8
if(!dect.checkReservation(3)){
- lcd.printf("3 is reserved");
currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
}
else{
currTrain->Stop();
}
- break;}
+ break;
+ }
case 6:{
lcd.printf("At 6");
if(!currTrain->isClockwise()) //IF CC goes towards 7
{
switch3.switchOn(); //Enable switch3
- int arr [3] = {4,5,11};
- vector<int> detectors(arr, arr + sizeof(arr) / sizeof(int));
- dect.clearReservation(detectors); //free nr 4,5,11
+ //int arr [3] = {4,5,11};
+ //vector<int> detectors(arr, arr + sizeof(arr) / sizeof(int));
+ dect.clearReservation(lane_4);
+ dect.clearReservation(junction_511); //free nr 4,5,11
currTrain->changeSpeed(currTrain->normalSpeed()); //Move forward
}
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
@@ -321,7 +317,8 @@
}
currTrain->changeSpeed(currTrain->normalSpeed()); //Go forward
}
- break;}
+ break;
+ }
case 7:{
lcd.printf("At 7");
currTrain->changeSpeed(currTrain->normalSpeed());
@@ -336,16 +333,15 @@
}
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);
+ dect.makeReservation(lane_10);
currTrain->changeSpeed(currTrain->slowlySpeed()); //Go forward
}
}
- break;}
+ break;
+ }
case 9:{
lcd.printf("at 9");
if(!dect.checkReservation(8)){
@@ -358,13 +354,13 @@
lcd.printf("8 is reserved");
currTrain->Stop();
}
- break;}
+ break;
+ }
case 10:{
lcd.printf("At 10");
dect.clearReservation(C_right); //free nr 6, 7, 8, 9
if(dect.checkReservation(12)){ //Check if 12 is reserved
- lcd.printf("12 is reserved");
currTrain->Stop(); //IF yes STOP
}
else{
@@ -372,7 +368,8 @@
dect.makeReservation(C_left);
currTrain->changeSpeed(currTrain->normalSpeed()); //go forward
}
- break;}
+ break;
+ }
case 11:{
lcd.printf("at 11");
@@ -385,35 +382,40 @@
}
else{
currTrain->Stop();
- lcd.printf("12 is reserved");
}
-
break;
- case 12:
+ }
+ case 12: {
lcd.printf("at 12");
switch1.switchOff(); //Turn of switch1
- int arr2 [3] = {5,10,11};
- vector<int> detectors2(arr2, arr2 + sizeof(arr2) / sizeof(int));
- dect.clearReservation(detectors2); //free nr 5, 10, 11
+ //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);
currTrain->changeSpeed(currTrain->normalSpeed()); //Move forward
- break;}
+ break;
+ }
case 13: {
lcd.printf("at 13");
currTrain->changeSpeed(currTrain->normalSpeed());
- break;}
+ break;
+ }
case 14:{
lcd.printf("at 21");
currTrain->changeSpeed(currTrain->slowlySpeed());
- break;}
+ break;
+ }
case 15:{
lcd.printf("at 22");
currTrain->changeSpeed(currTrain->normalSpeed());
- break;}
+ break;
+ }
default: {
lcd.printf("Not in a valid case");
currTrain->Stop();
- break; }
+ break;
+ }
}
mcp->_read(GPIOA);
@@ -445,11 +447,10 @@
bool readSwitch(DigitalIn theSwitch){
int val = theSwitch.read();
- //lcd.printf("%d", val);
if(val == 1)
- return true;
+ return true;
else
- return false;
+ return false;
}
void init_mcp() {
