Fiona Lin / Mbed OS cap_sense
Revision:
0:4e3ad938564e
Child:
2:d9745be6c253
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dis_exp.cpp	Tue Jun 28 21:32:51 2022 +0000
@@ -0,0 +1,70 @@
+#include <mbed.h>
+#include "dis_exp.h"
+#include "capsense.h"
+#include "stepper.h"
+
+DiscreteExperiment::DiscreteExperiment(StepperMotor& motor, CapSense& capsense, 
+                                       int32_t n_measure, uint32_t t_measure_us, 
+                                       int32_t delta_steps, int32_t max_steps)
+    : motor(motor), capsense(capsense), n_measure(n_measure),
+      t_measure_us(t_measure_us), delta_steps(delta_steps), 
+      max_steps(max_steps), steps_taken(0) {}
+    
+void DiscreteExperiment::proceed() {
+    
+    bool measured = false;
+
+    switch (state) {
+        case State::IDLE:
+            break;
+        case State::DONE:
+            break;
+        case State::MOVING:
+            if (move_counter != 0 && steps_taken < max_steps) {
+                if (move_counter < 0) {
+                    printf("[bug] Oh shit....\n");
+                motor.step_positive();
+                move_counter--;
+                steps_taken++;
+            } else {
+                state = MEASURING;
+                measu_counter = n_measure;
+            }
+            break;
+        case State::MEASURING:
+            if (measu_counter != 0) {
+                if (measu_counter < 0) {
+                    printf("[bug] Oh shit....\n");
+                }
+                while (!measured) {
+                    measured = capsense.try_measure();
+                }
+                data.push_back({steps_taken, capsense.read_measurement()});
+                measu_counter--;
+            } else {
+                state = MOVING;
+                move_counter = delta_steps;
+            }
+            break;
+    }
+    }
+            
+}
+
+
+bool DiscreteExperiment::is_done() {
+    return state == DONE;
+}
+
+std::vector<std::tuple<int32_t, long>>& DiscreteExperiment::report() {
+    return data;
+}
+
+void DiscreteExperiment::start() {
+    state = MOVING;
+    move_counter = delta_steps;
+}
+
+void DiscreteExperiment::reset() {
+    state = IDLE;
+}