Jasmine Karlsson / Mbed 2 deprecated train_rail

Dependencies:   mbed TextLCD

Revision:
27:9f9cd0df9a79
Parent:
26:f5e71308a13e
Child:
28:1430685f4d12
--- a/main.cpp	Wed Jun 20 10:05:45 2018 +0000
+++ b/main.cpp	Wed Jun 20 14:38:20 2018 +0000
@@ -42,6 +42,8 @@
 //const unsigned int DCCinst_step6 = 0x68; //step 6 1/4 speed
 const unsigned int normal_speed = 0x78; //step 13 1/2 speed
 
+const unsigned int high_speed = 0x7A; //high speed
+
 const unsigned int DCCinst_switch1 = 0x81; //Activate switch1
 const unsigned int DCCinst_switch2 = 0x82; //Activate switch2
 const unsigned int DCCinst_switch3 = 0x84; //Activate switch3
@@ -73,12 +75,12 @@
 void init_mcp();
 void init_interrupt();
 void init_trains();
-void executeCase(int pos);
+void executeCase(int pos, Train* currTrain);
 Train& assignTrain(int pos);
 
 //Trains
-Train redTrain(DCCaddress_red, normal_speed, redStartVal);
-Train silverTrain(DCCaddress_silver,normal_speed, silverStartVal);
+Train redTrain(DCCaddress_red, normal_speed, redStartVal, high_speed);
+Train silverTrain(DCCaddress_silver,normal_speed, silverStartVal, normal_speed);
 //Switches
 Switch switch1(DCCaddress_switch,DCCinst_switch1);
 Switch switch2(DCCaddress_switch,DCCinst_switch2);
@@ -106,10 +108,12 @@
         }
         
         if(redTrain.checkStop()){                       //check if Train stopped
-            executeCase(redTrain.getPosition());
+            executeCase(redTrain.getPosition(), &redTrain);
+            wait(5);
         }
         else if(silverTrain.checkStop()){
-            executeCase(silverTrain.getPosition());
+            executeCase(silverTrain.getPosition(), &silverTrain);
+            wait(5);
         }
         
         if(redTrain.checkStop() && silverTrain.checkStop())  {
@@ -165,11 +169,11 @@
 Train& assignTrain(int pos){
     
     //Check which train got the interupt
-    if(redTrain.checkInterupt(pos)){
+    if(redTrain.checkInterupt(pos) && !redTrain.checkStop()){
         redTrain.setPosition(pos);
         return redTrain;
     }
-    else if(silverTrain.checkInterupt(pos)){
+    else if(silverTrain.checkInterupt(pos) && !silverTrain.checkStop()){
         silverTrain.setPosition(pos);
         return silverTrain;
     }else{
@@ -182,13 +186,13 @@
     }
 }
 
-void executeCase(int pos){
-    Train* currTrain = &assignTrain(pos);
+void executeCase(int pos, Train* currTrain){
+    
     
     switch(pos){
     case 0:{
         lcd.printf("at 0");
-        currTrain->changeSpeed(normal_speed);
+        currTrain->changeSpeed(currTrain->normalSpeed());
         break;}
     case 1:{
         lcd.printf("at 1");
@@ -198,7 +202,7 @@
             lcd.printf("slow down");
         }*/
         //else
-            currTrain->changeSpeed(normal_speed);
+            currTrain->changeSpeed(currTrain->normalSpeed());
         
         break;}
     case 2:{
@@ -206,21 +210,19 @@
        Stop everytime at 2     
        */
        lcd.printf("at 2"); 
-       dect.showReservation();
-       wait(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 < 75){                                                //0.25 chance to enable the switch2,  reserve 3,9
+           if (v1 < 25){                                                //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);
+               vector<int> detectors(4);
+               dect.makeReservation(detectors);
             }        
         }else if(dect.checkReservation(4)){                             //IF 4 is reserved
             switch2.switchOn();                                        //Enable switch2, reserve 3,9
@@ -235,22 +237,19 @@
             vector<int> detectors(4);
             dect.makeReservation(detectors);
         }
-        currTrain->changeSpeed(normal_speed);                          //Go forward
+        currTrain->changeSpeed(currTrain->normalSpeed());                          //Go forward
              
         break;}
     case 3:{
         lcd.printf("at 3");
-        dect.showReservation();
        
         currTrain->changeDirection();               //change direction  
         switch2.switchOff();                        //Disable switch2
         dect.clearReservation(C_left);              //free nr 0,1,2,12,13    
-        currTrain->changeSpeed(normal_speed);     //go forward                                                                 
+        currTrain->changeSpeed(currTrain->normalSpeed());     //go forward                                                                 
         break;}
     case 4:{
         lcd.printf("At 4");
-        dect.showReservation();
-        wait(2);
         dect.clearReservation(C_left);   //free nr 0,1,2,12,13
         switch3.switchOn();                 //Turn on switch3
         if(dect.checkReservation(6)){   //Check if 6 is reserved
@@ -259,32 +258,28 @@
         }
         else{
             dect.makeReservation(C_right);  //else reserve 6,7,8 and go forward
-            currTrain->changeSpeed(normal_speed);
+            currTrain->changeSpeed(currTrain->normalSpeed());
         }
         
-        dect.showReservation(); 
         break;  }    
     case 5:{
         lcd.printf("at 5");
-        dect.showReservation();
         
         currTrain->changeDirection();               //change direction  
         switch3.switchOn();                        //Enable switch3
         dect.clearReservation(C_right);              //free nr 6,7,8
-        currTrain->changeSpeed(normal_speed);          //go forward                                                               
+        currTrain->changeSpeed(currTrain->normalSpeed());          //go forward                                                               
         
         break;}
     case 6:{
         lcd.printf("At 6");
-        dect.showReservation();
-        wait(2);
         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
-            currTrain->changeSpeed(normal_speed);                          //Move forward
+            currTrain->changeSpeed(currTrain->normalSpeed());                          //Move forward
         }
         else{                           
            if(dect.checkReservation(5)){                           //IF 5 is reserved
@@ -293,43 +288,36 @@
             }else{                                                          //else 5 reserved
                 switch3.switchOff();                                         //Enable switch3, reserve 4
                 dect.makeReservation(junction_511);
-                currTrain->changeSpeed(normal_speed);
+                currTrain->changeSpeed(currTrain->normalSpeed());
             }
-            currTrain->changeSpeed(normal_speed);                          //Go forward
+            currTrain->changeSpeed(currTrain->normalSpeed());                          //Go forward
         }         
         break;}
     case 7:{
         lcd.printf("At 7");        
-        dect.showReservation();
-        wait(2);
-        currTrain->changeSpeed(normal_speed);
+        currTrain->changeSpeed(currTrain->normalSpeed());
         break;}
     case 8:{
           lcd.printf("At 8");        
-          dect.showReservation();
-        wait(2);
         if(currTrain->isClockwise())        //IF C goes towards 7
         {
             switch4.switchOff();                                             //Disable switch4
             dect.clearReservation(junction_39);                                //Free 3,9,10
-            currTrain->changeSpeed(normal_speed);                          //Move forward
+            currTrain->changeSpeed(currTrain->normalSpeed());                          //Move forward
         }
        else{                                                               //IF CC                        
             switch4.switchOff();                                         //Disable switch4, reserve 10
             vector<int> detectors(10);
             dect.makeReservation(detectors);
-            currTrain->changeSpeed(normal_speed);                          //Go forward
+            currTrain->changeSpeed(currTrain->normalSpeed());                          //Go forward
         }         
         break;}
     case 9:{
         lcd.printf("at 9");         
-        dect.showReservation();
-        wait(2);
-        dect.showReservation();
         if(!dect.checkReservation(8)){
             switch4.switchOn();         //Enable switch4
             dect.makeReservation(C_right);                                 //Reserve 6,7,8
-            currTrain->changeSpeed(normal_speed);                    //Go forward
+            currTrain->changeSpeed(currTrain->normalSpeed());                    //Go forward
 
         }
         else{
@@ -339,8 +327,6 @@
         break;}
     case 10:{
         lcd.printf("At 10");        
-        dect.showReservation();
-        wait(2);
 
         dect.clearReservation(C_right); //free nr 6, 7, 8, 9
         switch1.switchOff();          //Turn off switch1
@@ -351,20 +337,18 @@
         else{
             lcd.printf("12 not reserved");                           
             dect.makeReservation(C_left);
-            currTrain->changeSpeed(normal_speed);      //go forward
+            currTrain->changeSpeed(currTrain->normalSpeed());      //go forward
         }     
         break;}
         
     case 11:{
         lcd.printf("at 11");        
-        dect.showReservation();
-        wait(2);
         
         if(!dect.checkReservation(12)){
             
             switch1.switchOn();                        //Enable switch1
             dect.makeReservation(C_left);               //Reserve 0,1,2, 12, 13   
-            currTrain->changeSpeed(normal_speed);         //go forward   
+            currTrain->changeSpeed(currTrain->normalSpeed());         //go forward   
         }
         else{
             currTrain->Stop();       
@@ -372,28 +356,25 @@
         
         break;
     case 12: 
-        lcd.printf("at 12");
-        dect.showReservation();
-        wait(2);
-        
+        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
-        currTrain->changeSpeed(normal_speed);                          //Move forward
+        currTrain->changeSpeed(currTrain->normalSpeed());                          //Move forward
         
         break;}
     case 13: {
         lcd.printf("at 13");
-        currTrain->changeSpeed(normal_speed);
+        currTrain->changeSpeed(currTrain->normalSpeed());
         break;}
     case 14:{
         lcd.printf("at 21");            
-        currTrain->changeSpeed(normal_speed);
+        currTrain->changeSpeed(slow_speed);
         break;}
     case 15:{
         lcd.printf("at 22");
-        currTrain->changeSpeed(normal_speed);
+        currTrain->changeSpeed(currTrain->normalSpeed());
         break;}
     default:   {
         lcd.printf("Not in a valid case");
@@ -422,8 +403,8 @@
     else 
         //PROBLEM
         lcd.printf("Fail to detect int");
-        
-    executeCase(pos); 
+    Train* currTrain = &assignTrain(pos);
+    executeCase(pos, currTrain); 
 }
 
 bool readSwitch(DigitalIn theSwitch){
@@ -484,5 +465,4 @@
     res2.push_back(12);
     //res2.push_back(13);
     dect.makeReservation(res2);
-    dect.showReservation();
 }
\ No newline at end of file