Fiona Lin / Mbed OS cap_sense
Committer:
fionalin
Date:
Tue Jun 28 21:32:51 2022 +0000
Revision:
0:4e3ad938564e
Child:
2:d9745be6c253
init commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fionalin 0:4e3ad938564e 1 #include <mbed.h>
fionalin 0:4e3ad938564e 2 #include "dis_exp.h"
fionalin 0:4e3ad938564e 3 #include "capsense.h"
fionalin 0:4e3ad938564e 4 #include "stepper.h"
fionalin 0:4e3ad938564e 5
fionalin 0:4e3ad938564e 6 DiscreteExperiment::DiscreteExperiment(StepperMotor& motor, CapSense& capsense,
fionalin 0:4e3ad938564e 7 int32_t n_measure, uint32_t t_measure_us,
fionalin 0:4e3ad938564e 8 int32_t delta_steps, int32_t max_steps)
fionalin 0:4e3ad938564e 9 : motor(motor), capsense(capsense), n_measure(n_measure),
fionalin 0:4e3ad938564e 10 t_measure_us(t_measure_us), delta_steps(delta_steps),
fionalin 0:4e3ad938564e 11 max_steps(max_steps), steps_taken(0) {}
fionalin 0:4e3ad938564e 12
fionalin 0:4e3ad938564e 13 void DiscreteExperiment::proceed() {
fionalin 0:4e3ad938564e 14
fionalin 0:4e3ad938564e 15 bool measured = false;
fionalin 0:4e3ad938564e 16
fionalin 0:4e3ad938564e 17 switch (state) {
fionalin 0:4e3ad938564e 18 case State::IDLE:
fionalin 0:4e3ad938564e 19 break;
fionalin 0:4e3ad938564e 20 case State::DONE:
fionalin 0:4e3ad938564e 21 break;
fionalin 0:4e3ad938564e 22 case State::MOVING:
fionalin 0:4e3ad938564e 23 if (move_counter != 0 && steps_taken < max_steps) {
fionalin 0:4e3ad938564e 24 if (move_counter < 0) {
fionalin 0:4e3ad938564e 25 printf("[bug] Oh shit....\n");
fionalin 0:4e3ad938564e 26 motor.step_positive();
fionalin 0:4e3ad938564e 27 move_counter--;
fionalin 0:4e3ad938564e 28 steps_taken++;
fionalin 0:4e3ad938564e 29 } else {
fionalin 0:4e3ad938564e 30 state = MEASURING;
fionalin 0:4e3ad938564e 31 measu_counter = n_measure;
fionalin 0:4e3ad938564e 32 }
fionalin 0:4e3ad938564e 33 break;
fionalin 0:4e3ad938564e 34 case State::MEASURING:
fionalin 0:4e3ad938564e 35 if (measu_counter != 0) {
fionalin 0:4e3ad938564e 36 if (measu_counter < 0) {
fionalin 0:4e3ad938564e 37 printf("[bug] Oh shit....\n");
fionalin 0:4e3ad938564e 38 }
fionalin 0:4e3ad938564e 39 while (!measured) {
fionalin 0:4e3ad938564e 40 measured = capsense.try_measure();
fionalin 0:4e3ad938564e 41 }
fionalin 0:4e3ad938564e 42 data.push_back({steps_taken, capsense.read_measurement()});
fionalin 0:4e3ad938564e 43 measu_counter--;
fionalin 0:4e3ad938564e 44 } else {
fionalin 0:4e3ad938564e 45 state = MOVING;
fionalin 0:4e3ad938564e 46 move_counter = delta_steps;
fionalin 0:4e3ad938564e 47 }
fionalin 0:4e3ad938564e 48 break;
fionalin 0:4e3ad938564e 49 }
fionalin 0:4e3ad938564e 50 }
fionalin 0:4e3ad938564e 51
fionalin 0:4e3ad938564e 52 }
fionalin 0:4e3ad938564e 53
fionalin 0:4e3ad938564e 54
fionalin 0:4e3ad938564e 55 bool DiscreteExperiment::is_done() {
fionalin 0:4e3ad938564e 56 return state == DONE;
fionalin 0:4e3ad938564e 57 }
fionalin 0:4e3ad938564e 58
fionalin 0:4e3ad938564e 59 std::vector<std::tuple<int32_t, long>>& DiscreteExperiment::report() {
fionalin 0:4e3ad938564e 60 return data;
fionalin 0:4e3ad938564e 61 }
fionalin 0:4e3ad938564e 62
fionalin 0:4e3ad938564e 63 void DiscreteExperiment::start() {
fionalin 0:4e3ad938564e 64 state = MOVING;
fionalin 0:4e3ad938564e 65 move_counter = delta_steps;
fionalin 0:4e3ad938564e 66 }
fionalin 0:4e3ad938564e 67
fionalin 0:4e3ad938564e 68 void DiscreteExperiment::reset() {
fionalin 0:4e3ad938564e 69 state = IDLE;
fionalin 0:4e3ad938564e 70 }