Zürcher Eliteeinheit / Mbed 2 deprecated ROME2_P4

Dependencies:   ROME2_P2 mbed

Fork of ROME2_P3 by Zürcher Eliteeinheit

Revision:
5:59079b76ac7f
Parent:
4:4428ede9beee
Child:
6:67263dc2c2cf
--- a/StateMachine.cpp	Thu Apr 12 12:19:19 2018 +0000
+++ b/StateMachine.cpp	Thu Apr 12 14:56:27 2018 +0000
@@ -23,6 +23,7 @@
     state = ROBOT_OFF;
     buttonNow = button;
     buttonBefore = buttonNow;
+    taskList.clear();
     
     ticker.attach(callback(this, &StateMachine::run), PERIOD);
 }
@@ -71,17 +72,22 @@
                 
                 enableMotorDriver = 1;
                 
-                controller.setTranslationalVelocity(TRANSLATIONAL_VELOCITY);
-                controller.setRotationalVelocity(0.0f);
+                taskList.push_back(new TaskWait(controller, 0.5f));
+                taskList.push_back(new TaskMoveTo(controller, 0.0f, 1.0f, 0.0f, 1.5f, 0.01f));
+                //taskList.push_back(new TaskWait(controller, 1.0f));
+                taskList.push_back(new TaskMoveTo(controller, 0.0f, 0.0f, 0.0f, 1.5f, 0.05f));
+                taskList.push_back(new TaskMoveTo(controller, 0.0f, 1.0f, 0.0f, 1.5f, 0.05f));
+                taskList.push_back(new TaskMoveTo(controller, 0.0f, 0.0f, 0.0f, 1.5f, 0.01f));
+                taskList.push_back(new TaskMoveTo(controller, 0.0f, 0.0f, 0.0f, 1.5f, 0.09f));
                 
-                state = MOVE_FORWARD;
+                state = PROCESSING_TASKS;
             }
             
             buttonBefore = buttonNow;
             
             break;
             
-        case MOVE_FORWARD:
+        case PROCESSING_TASKS:
             
             buttonNow = button;
             
@@ -105,6 +111,22 @@
                 controller.setRotationalVelocity(-ROTATIONAL_VELOCITY);
                 
                 state = TURN_RIGHT;
+                
+            } else if (taskList.size() > 0) {
+                
+                Task* task = taskList.front();
+                int result = task->run(PERIOD);
+                if (result == Task::DONE) {
+                    taskList.pop_front();
+                    delete task;
+                }
+                
+            } else {
+                
+                controller.setTranslationalVelocity(0.0f);
+                controller.setRotationalVelocity(0.0f);
+                
+                state = SLOWING_DOWN;
             }
             
             buttonBefore = buttonNow;
@@ -117,16 +139,14 @@
             
             if (buttonNow && !buttonBefore) {   // detect button rising edge
                 
+                controller.setTranslationalVelocity(0.0f);
                 controller.setRotationalVelocity(0.0f);
                 
                 state = SLOWING_DOWN;
                 
             } else if ((irSensor0 > DISTANCE_THRESHOLD) && (irSensor1 > DISTANCE_THRESHOLD) && (irSensor5 > DISTANCE_THRESHOLD)) {
                 
-                controller.setTranslationalVelocity(TRANSLATIONAL_VELOCITY);
-                controller.setRotationalVelocity(0.0f);
-                
-                state = MOVE_FORWARD;
+                state = PROCESSING_TASKS;
             }
             
             buttonBefore = buttonNow;
@@ -139,16 +159,14 @@
             
             if (buttonNow && !buttonBefore) {   // detect button rising edge
                 
+                controller.setTranslationalVelocity(0.0f);
                 controller.setRotationalVelocity(0.0f);
                 
                 state = SLOWING_DOWN;
                 
             } else if ((irSensor0 > DISTANCE_THRESHOLD) && (irSensor1 > DISTANCE_THRESHOLD) && (irSensor5 > DISTANCE_THRESHOLD)) {
                 
-                controller.setTranslationalVelocity(TRANSLATIONAL_VELOCITY);
-                controller.setRotationalVelocity(0.0f);
-                
-                state = MOVE_FORWARD;
+                state = PROCESSING_TASKS;
             }
             
             buttonBefore = buttonNow;
@@ -161,6 +179,11 @@
                 
                 enableMotorDriver = 0;
                 
+                while (taskList.size() > 0) {
+                    delete taskList.front();
+                    taskList.pop_front();
+                }
+                
                 state = ROBOT_OFF;
             }
             
@@ -171,4 +194,3 @@
             state = ROBOT_OFF;
     }
 }
-