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.
dis_exp.cpp@0:4e3ad938564e, 2022-06-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |