Fiona Lin / Mbed OS cap_sense
Committer:
fionalin
Date:
Thu Aug 04 15:14:29 2022 -0400
Revision:
2:d9745be6c253
hehe forgot to commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fionalin 2:d9745be6c253 1 #include <cmath>
fionalin 2:d9745be6c253 2 #include <cstdint>
fionalin 2:d9745be6c253 3 #include <mbed.h>
fionalin 2:d9745be6c253 4 #include "stepper.h"
fionalin 2:d9745be6c253 5 #include "capsense.h"
fionalin 2:d9745be6c253 6 #include "dis_exp.h"
fionalin 2:d9745be6c253 7 #include "data_dumper.h"
fionalin 2:d9745be6c253 8 #include "Adafruit_MPR121.h"
fionalin 2:d9745be6c253 9
fionalin 2:d9745be6c253 10 const PinName MOTOR_ENABLE = D15;
fionalin 2:d9745be6c253 11 const PinName MOTOR_STEP = D9;
fionalin 2:d9745be6c253 12 const PinName MOTOR_DIR = D13;
fionalin 2:d9745be6c253 13 const PinName MOTOR_MS1 = D12;
fionalin 2:d9745be6c253 14 const PinName MOTOR_MS2 = D11;
fionalin 2:d9745be6c253 15 const PinName MOTOR_MS3 = D10;
fionalin 2:d9745be6c253 16 const PinName SLEEP = D1;
fionalin 2:d9745be6c253 17
fionalin 2:d9745be6c253 18 const PinName CS_MEASURE = D2;
fionalin 2:d9745be6c253 19 const PinName CS_SQUARE = D3;
fionalin 2:d9745be6c253 20
fionalin 2:d9745be6c253 21 const int BAUD_RATE = 9600;
fionalin 2:d9745be6c253 22
fionalin 2:d9745be6c253 23 const int32_t DIS_N_MEASURE = 50;
fionalin 2:d9745be6c253 24 const uint32_t DIS_T_MEASURE_US = 400; //currently not in use
fionalin 2:d9745be6c253 25 const int32_t DIS_DELTA_STEPS = 25;
fionalin 2:d9745be6c253 26 const int32_t DIS_MAX_STEPS = 800;
fionalin 2:d9745be6c253 27
fionalin 2:d9745be6c253 28 enum State {
fionalin 2:d9745be6c253 29 STOPPED,
fionalin 2:d9745be6c253 30 UP,
fionalin 2:d9745be6c253 31 DOWN,
fionalin 2:d9745be6c253 32 DISCRETE,
fionalin 2:d9745be6c253 33 CONTINUOUS
fionalin 2:d9745be6c253 34 };
fionalin 2:d9745be6c253 35
fionalin 2:d9745be6c253 36 int main(void) {
fionalin 2:d9745be6c253 37 State curState = State::STOPPED;
fionalin 2:d9745be6c253 38
fionalin 2:d9745be6c253 39 BufferedSerial pc(USBTX, USBRX, BAUD_RATE);
fionalin 2:d9745be6c253 40 pc.set_blocking(false);
fionalin 2:d9745be6c253 41
fionalin 2:d9745be6c253 42 StepperMotor motor(MOTOR_ENABLE,
fionalin 2:d9745be6c253 43 MOTOR_STEP,
fionalin 2:d9745be6c253 44 MOTOR_DIR,
fionalin 2:d9745be6c253 45 MOTOR_MS1,
fionalin 2:d9745be6c253 46 MOTOR_MS2,
fionalin 2:d9745be6c253 47 MOTOR_MS3,
fionalin 2:d9745be6c253 48 SLEEP);
fionalin 2:d9745be6c253 49
fionalin 2:d9745be6c253 50 // CapSense cap_sense(CS_MEASURE, CS_SQUARE);
fionalin 2:d9745be6c253 51
fionalin 2:d9745be6c253 52 Adafruit_MPR121 mpr121;
fionalin 2:d9745be6c253 53
fionalin 2:d9745be6c253 54 DiscreteExperiment discrete_exp(motor, mpr121, DIS_N_MEASURE, DIS_T_MEASURE_US,
fionalin 2:d9745be6c253 55 DIS_DELTA_STEPS, DIS_MAX_STEPS);
fionalin 2:d9745be6c253 56
fionalin 2:d9745be6c253 57 // ContinuousExperiment continuous_exp(motor, cap_sense);
fionalin 2:d9745be6c253 58
fionalin 2:d9745be6c253 59 while (true) {
fionalin 2:d9745be6c253 60 // State behavior
fionalin 2:d9745be6c253 61 switch (curState) {
fionalin 2:d9745be6c253 62 case State::STOPPED:
fionalin 2:d9745be6c253 63 break;
fionalin 2:d9745be6c253 64 case State::UP:
fionalin 2:d9745be6c253 65 /* move motor up */
fionalin 2:d9745be6c253 66 motor.step_positive();
fionalin 2:d9745be6c253 67 break;
fionalin 2:d9745be6c253 68 case State::DOWN:
fionalin 2:d9745be6c253 69 /* move motor down */
fionalin 2:d9745be6c253 70 motor.step_negative();
fionalin 2:d9745be6c253 71 break;
fionalin 2:d9745be6c253 72 case State::DISCRETE:
fionalin 2:d9745be6c253 73 /* discrete state behavior */
fionalin 2:d9745be6c253 74 discrete_exp.proceed();
fionalin 2:d9745be6c253 75 if (discrete_exp.is_done()) {
fionalin 2:d9745be6c253 76 auto& data = discrete_exp.report();
fionalin 2:d9745be6c253 77 printf("Gathered %d data points. Starting data dump...\n", data.size());
fionalin 2:d9745be6c253 78 dump_data(data);
fionalin 2:d9745be6c253 79 curState = State::STOPPED;
fionalin 2:d9745be6c253 80 }
fionalin 2:d9745be6c253 81 break;
fionalin 2:d9745be6c253 82 case State::CONTINUOUS:
fionalin 2:d9745be6c253 83 /*continuous state behavior */
fionalin 2:d9745be6c253 84 // continuous_exp.proceed();
fionalin 2:d9745be6c253 85 // if (continuous_exp.is_done()) {
fionalin 2:d9745be6c253 86 // continuous_exp.report();
fionalin 2:d9745be6c253 87 // }
fionalin 2:d9745be6c253 88 break;
fionalin 2:d9745be6c253 89 default:
fionalin 2:d9745be6c253 90 printf("[ERROR, %d] Not a state!\n", __LINE__);
fionalin 2:d9745be6c253 91 break;
fionalin 2:d9745be6c253 92 }
fionalin 2:d9745be6c253 93
fionalin 2:d9745be6c253 94 // Switch to next state
fionalin 2:d9745be6c253 95 char input;
fionalin 2:d9745be6c253 96 ssize_t len = pc.read(&input, 1);
fionalin 2:d9745be6c253 97 if (len > 0) {
fionalin 2:d9745be6c253 98 switch (input) {
fionalin 2:d9745be6c253 99 case '1':
fionalin 2:d9745be6c253 100 curState = State::UP;
fionalin 2:d9745be6c253 101 break;
fionalin 2:d9745be6c253 102 case '2':
fionalin 2:d9745be6c253 103 curState = State::DOWN;
fionalin 2:d9745be6c253 104 break;
fionalin 2:d9745be6c253 105 case '3':
fionalin 2:d9745be6c253 106 printf("Starting DISCRETE experiment\n");
fionalin 2:d9745be6c253 107 curState = State::DISCRETE;
fionalin 2:d9745be6c253 108 discrete_exp.reset();
fionalin 2:d9745be6c253 109 discrete_exp.start();
fionalin 2:d9745be6c253 110 break;
fionalin 2:d9745be6c253 111 case '4':
fionalin 2:d9745be6c253 112 curState = State::CONTINUOUS;
fionalin 2:d9745be6c253 113 // continuous_exp.reset();
fionalin 2:d9745be6c253 114 // continuous_exp.start();
fionalin 2:d9745be6c253 115 break;
fionalin 2:d9745be6c253 116 case '0':
fionalin 2:d9745be6c253 117 printf("Stopping\n");
fionalin 2:d9745be6c253 118 if (curState == DISCRETE) {
fionalin 2:d9745be6c253 119 auto& data = discrete_exp.report();
fionalin 2:d9745be6c253 120 printf("Gathered %d data points. Starting data dump...\n", data.size());
fionalin 2:d9745be6c253 121 dump_data(data);
fionalin 2:d9745be6c253 122 discrete_exp.reset();
fionalin 2:d9745be6c253 123 } else if (curState == CONTINUOUS) {
fionalin 2:d9745be6c253 124 // continuous_exp.stop();
fionalin 2:d9745be6c253 125 // continuous_exp.report();
fionalin 2:d9745be6c253 126 }
fionalin 2:d9745be6c253 127 curState = State::STOPPED;
fionalin 2:d9745be6c253 128 break;
fionalin 2:d9745be6c253 129 default:
fionalin 2:d9745be6c253 130 printf("[ERROR, %d] Not a command!\n", __LINE__);
fionalin 2:d9745be6c253 131 break;
fionalin 2:d9745be6c253 132 }
fionalin 2:d9745be6c253 133 }
fionalin 2:d9745be6c253 134 }
fionalin 2:d9745be6c253 135 return 0;
fionalin 2:d9745be6c253 136 }