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: dis_exp.cpp
- 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; +}