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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fionalin 0:4e3ad938564e 1 /**
fionalin 0:4e3ad938564e 2 * This is an example of an FSM controlling a motor.
fionalin 0:4e3ad938564e 3 */
fionalin 0:4e3ad938564e 4 #include <mbed.h>
fionalin 0:4e3ad938564e 5 #include "stepper.h"
fionalin 0:4e3ad938564e 6 #include "capsense.h"
fionalin 0:4e3ad938564e 7 #include "dis_exp.h"
fionalin 0:4e3ad938564e 8
fionalin 0:4e3ad938564e 9 const PinName MOTOR_ENABLE = D1;
fionalin 0:4e3ad938564e 10 const PinName MOTOR_STEP = D2;
fionalin 0:4e3ad938564e 11 const PinName MOTOR_DIR = D3;
fionalin 0:4e3ad938564e 12 const PinName MOTOR_MS1 = D4;
fionalin 0:4e3ad938564e 13 const PinName MOTOR_MS2 = D5;
fionalin 0:4e3ad938564e 14 const PinName MOTOR_MS3 = D6;
fionalin 0:4e3ad938564e 15
fionalin 0:4e3ad938564e 16 const PinName CS_MEASURE = D7;
fionalin 0:4e3ad938564e 17 const PinName CS_SQUARE = D8;
fionalin 0:4e3ad938564e 18
fionalin 0:4e3ad938564e 19 const int32_t N_MEASURE = 20;
fionalin 0:4e3ad938564e 20 const uint32_t T_MEASURE_US = 400; //currently not in use
fionalin 0:4e3ad938564e 21 const int32_t DELTA_STEPS = 200;
fionalin 0:4e3ad938564e 22 const int32_t MAX_STEPS = 1000;
fionalin 0:4e3ad938564e 23
fionalin 0:4e3ad938564e 24
fionalin 0:4e3ad938564e 25 enum State {
fionalin 0:4e3ad938564e 26 STOPPED,
fionalin 0:4e3ad938564e 27 UP,
fionalin 0:4e3ad938564e 28 DOWN,
fionalin 0:4e3ad938564e 29 DISCRETE,
fionalin 0:4e3ad938564e 30 CONTINUOUS
fionalin 0:4e3ad938564e 31 };
fionalin 0:4e3ad938564e 32
fionalin 0:4e3ad938564e 33 int main(void) {
fionalin 0:4e3ad938564e 34 State curState = State::STOPPED;
fionalin 0:4e3ad938564e 35
fionalin 0:4e3ad938564e 36 BufferedSerial pc(USBRX, USBTX);
fionalin 0:4e3ad938564e 37 pc.set_baud(9600);
fionalin 0:4e3ad938564e 38
fionalin 0:4e3ad938564e 39 StepperMotor motor(MOTOR_ENABLE, MOTOR_STEP, MOTOR_DIR, MOTOR_MS1,
fionalin 0:4e3ad938564e 40 MOTOR_MS2, MOTOR_MS3);
fionalin 0:4e3ad938564e 41
fionalin 0:4e3ad938564e 42 CapSense cap_sense(CS_MEASURE, CS_SQUARE);
fionalin 0:4e3ad938564e 43
fionalin 0:4e3ad938564e 44 DiscreteExperiment discrete_exp(motor, cap_sense, N_MEASURE, T_MEASURE_US,
fionalin 0:4e3ad938564e 45 DELTA_STEPS, MAX_STEPS);
fionalin 0:4e3ad938564e 46
fionalin 0:4e3ad938564e 47 // ContinuousExperiment continuous_exp(motor, cap_sense);
fionalin 0:4e3ad938564e 48
fionalin 0:4e3ad938564e 49 while (true) {
fionalin 0:4e3ad938564e 50 // State behavior
fionalin 0:4e3ad938564e 51 switch (curState) {
fionalin 0:4e3ad938564e 52 case State::STOPPED:
fionalin 0:4e3ad938564e 53 break;
fionalin 0:4e3ad938564e 54 case State::UP:
fionalin 0:4e3ad938564e 55 /* move motor up */
fionalin 0:4e3ad938564e 56 motor.step_positive();
fionalin 0:4e3ad938564e 57 break;
fionalin 0:4e3ad938564e 58 case State::DOWN:
fionalin 0:4e3ad938564e 59 /* move motor down */
fionalin 0:4e3ad938564e 60 motor.step_negative();
fionalin 0:4e3ad938564e 61 break;
fionalin 0:4e3ad938564e 62 case State::DISCRETE:
fionalin 0:4e3ad938564e 63 /* discrete state behavior */
fionalin 0:4e3ad938564e 64 discrete_exp.proceed();
fionalin 0:4e3ad938564e 65 if (discrete_exp.is_done()) {
fionalin 0:4e3ad938564e 66 discrete_exp.report();
fionalin 0:4e3ad938564e 67 }
fionalin 0:4e3ad938564e 68 break;
fionalin 0:4e3ad938564e 69 case State::CONTINUOUS:
fionalin 0:4e3ad938564e 70 /*continuous state behavior */
fionalin 0:4e3ad938564e 71 // continuous_exp.proceed();
fionalin 0:4e3ad938564e 72 // if (continuous_exp.is_done()) {
fionalin 0:4e3ad938564e 73 // continuous_exp.report();
fionalin 0:4e3ad938564e 74 // }
fionalin 0:4e3ad938564e 75 break;
fionalin 0:4e3ad938564e 76 default:
fionalin 0:4e3ad938564e 77 printf("[ERROR, %d] Not a state!\n", __LINE__);
fionalin 0:4e3ad938564e 78 break;
fionalin 0:4e3ad938564e 79 }
fionalin 0:4e3ad938564e 80
fionalin 0:4e3ad938564e 81 // Switch to next state
fionalin 0:4e3ad938564e 82 char input;
fionalin 0:4e3ad938564e 83 ssize_t len = pc.read(&input, 1);
fionalin 0:4e3ad938564e 84 if (len > 0) {
fionalin 0:4e3ad938564e 85 switch (input) {
fionalin 0:4e3ad938564e 86 case '1':
fionalin 0:4e3ad938564e 87 curState = State::UP;
fionalin 0:4e3ad938564e 88 break;
fionalin 0:4e3ad938564e 89 case '2':
fionalin 0:4e3ad938564e 90 curState = State::DOWN;
fionalin 0:4e3ad938564e 91 break;
fionalin 0:4e3ad938564e 92 case '3':
fionalin 0:4e3ad938564e 93 curState = State::DISCRETE;
fionalin 0:4e3ad938564e 94 discrete_exp.reset();
fionalin 0:4e3ad938564e 95 discrete_exp.start();
fionalin 0:4e3ad938564e 96 break;
fionalin 0:4e3ad938564e 97 case '4':
fionalin 0:4e3ad938564e 98 curState = State::CONTINUOUS;
fionalin 0:4e3ad938564e 99 // continuous_exp.reset();
fionalin 0:4e3ad938564e 100 // continuous_exp.start();
fionalin 0:4e3ad938564e 101 break;
fionalin 0:4e3ad938564e 102 case '0':
fionalin 0:4e3ad938564e 103 if (curState == DISCRETE) {
fionalin 0:4e3ad938564e 104 discrete_exp.report();
fionalin 0:4e3ad938564e 105 discrete_exp.reset();
fionalin 0:4e3ad938564e 106 } else if (curState == CONTINUOUS) {
fionalin 0:4e3ad938564e 107 // continuous_exp.stop();
fionalin 0:4e3ad938564e 108 // continuous_exp.report();
fionalin 0:4e3ad938564e 109 }
fionalin 0:4e3ad938564e 110 curState = State::STOPPED;
fionalin 0:4e3ad938564e 111 break;
fionalin 0:4e3ad938564e 112 default:
fionalin 0:4e3ad938564e 113 printf("[ERROR, %d] Not a command!\n", __LINE__);
fionalin 0:4e3ad938564e 114 break;
fionalin 0:4e3ad938564e 115 }
fionalin 0:4e3ad938564e 116 }
fionalin 0:4e3ad938564e 117 }
fionalin 0:4e3ad938564e 118 return 0;
fionalin 0:4e3ad938564e 119 }