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@2:d9745be6c253, 2022-08-04 (annotated)
- Committer:
- fionalin
- Date:
- Thu Aug 04 15:14:29 2022 -0400
- Revision:
- 2:d9745be6c253
- Parent:
- 0:4e3ad938564e
hehe forgot to commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fionalin | 2:d9745be6c253 | 1 | #include <cstdint> |
fionalin | 2:d9745be6c253 | 2 | #include <cstdio> |
fionalin | 0:4e3ad938564e | 3 | #include <mbed.h> |
fionalin | 0:4e3ad938564e | 4 | #include "dis_exp.h" |
fionalin | 2:d9745be6c253 | 5 | #include "Adafruit_MPR121.h" |
fionalin | 0:4e3ad938564e | 6 | #include "stepper.h" |
fionalin | 0:4e3ad938564e | 7 | |
fionalin | 2:d9745be6c253 | 8 | DiscreteExperiment::DiscreteExperiment(StepperMotor& motor, Adafruit_MPR121& mpr121, |
fionalin | 0:4e3ad938564e | 9 | int32_t n_measure, uint32_t t_measure_us, |
fionalin | 0:4e3ad938564e | 10 | int32_t delta_steps, int32_t max_steps) |
fionalin | 2:d9745be6c253 | 11 | : motor(motor), mpr121(mpr121), n_measure(n_measure), |
fionalin | 0:4e3ad938564e | 12 | t_measure_us(t_measure_us), delta_steps(delta_steps), |
fionalin | 0:4e3ad938564e | 13 | max_steps(max_steps), steps_taken(0) {} |
fionalin | 0:4e3ad938564e | 14 | |
fionalin | 0:4e3ad938564e | 15 | void DiscreteExperiment::proceed() { |
fionalin | 2:d9745be6c253 | 16 | const int DISCHARGE_TOLERANCE = 5; |
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 | 2:d9745be6c253 | 26 | } |
fionalin | 0:4e3ad938564e | 27 | motor.step_positive(); |
fionalin | 2:d9745be6c253 | 28 | wait_us(100); |
fionalin | 2:d9745be6c253 | 29 | printf("motor stepping now\n"); |
fionalin | 2:d9745be6c253 | 30 | printf("move_counter %d\n", move_counter); |
fionalin | 2:d9745be6c253 | 31 | printf("steps taken %d\n", steps_taken); |
fionalin | 0:4e3ad938564e | 32 | move_counter--; |
fionalin | 0:4e3ad938564e | 33 | steps_taken++; |
fionalin | 0:4e3ad938564e | 34 | } else { |
fionalin | 2:d9745be6c253 | 35 | printf("state went to measuring \n"); |
fionalin | 0:4e3ad938564e | 36 | state = MEASURING; |
fionalin | 0:4e3ad938564e | 37 | measu_counter = n_measure; |
fionalin | 0:4e3ad938564e | 38 | } |
fionalin | 0:4e3ad938564e | 39 | break; |
fionalin | 0:4e3ad938564e | 40 | case State::MEASURING: |
fionalin | 0:4e3ad938564e | 41 | if (measu_counter != 0) { |
fionalin | 0:4e3ad938564e | 42 | if (measu_counter < 0) { |
fionalin | 0:4e3ad938564e | 43 | printf("[bug] Oh shit....\n"); |
fionalin | 0:4e3ad938564e | 44 | } |
fionalin | 2:d9745be6c253 | 45 | // using channel 11 on adafruit mpr121 |
fionalin | 2:d9745be6c253 | 46 | uint32_t tau = mpr121.filteredData(11); |
fionalin | 2:d9745be6c253 | 47 | |
fionalin | 2:d9745be6c253 | 48 | data.push_back({steps_taken, tau}); |
fionalin | 0:4e3ad938564e | 49 | measu_counter--; |
fionalin | 2:d9745be6c253 | 50 | |
fionalin | 2:d9745be6c253 | 51 | wait_us(DISCHARGE_TOLERANCE*tau); |
fionalin | 2:d9745be6c253 | 52 | } else if (steps_taken < max_steps) { |
fionalin | 0:4e3ad938564e | 53 | state = MOVING; |
fionalin | 0:4e3ad938564e | 54 | move_counter = delta_steps; |
fionalin | 2:d9745be6c253 | 55 | } else { |
fionalin | 2:d9745be6c253 | 56 | state = DONE; |
fionalin | 2:d9745be6c253 | 57 | steps_taken = 0; // clears the steps_taken counter so that next measure can run |
fionalin | 0:4e3ad938564e | 58 | } |
fionalin | 0:4e3ad938564e | 59 | break; |
fionalin | 0:4e3ad938564e | 60 | } |
fionalin | 0:4e3ad938564e | 61 | } |
fionalin | 0:4e3ad938564e | 62 | |
fionalin | 0:4e3ad938564e | 63 | |
fionalin | 0:4e3ad938564e | 64 | bool DiscreteExperiment::is_done() { |
fionalin | 0:4e3ad938564e | 65 | return state == DONE; |
fionalin | 0:4e3ad938564e | 66 | } |
fionalin | 0:4e3ad938564e | 67 | |
fionalin | 2:d9745be6c253 | 68 | std::vector<std::tuple<int32_t, uint32_t>>& DiscreteExperiment::report() { |
fionalin | 0:4e3ad938564e | 69 | return data; |
fionalin | 0:4e3ad938564e | 70 | } |
fionalin | 0:4e3ad938564e | 71 | |
fionalin | 0:4e3ad938564e | 72 | void DiscreteExperiment::start() { |
fionalin | 0:4e3ad938564e | 73 | state = MOVING; |
fionalin | 0:4e3ad938564e | 74 | move_counter = delta_steps; |
fionalin | 0:4e3ad938564e | 75 | } |
fionalin | 0:4e3ad938564e | 76 | |
fionalin | 0:4e3ad938564e | 77 | void DiscreteExperiment::reset() { |
fionalin | 0:4e3ad938564e | 78 | state = IDLE; |
fionalin | 0:4e3ad938564e | 79 | } |