State machine with EMG functions and parameters
Dependencies: biquadFilter FastPWM HIDScope MODSERIAL mbed
Fork of StateMachine by
main.cpp@3:9c63fc5f157e, 2018-10-31 (annotated)
- Committer:
- tverouden
- Date:
- Wed Oct 31 11:51:03 2018 +0000
- Revision:
- 3:9c63fc5f157e
- Parent:
- 2:d70795e4e0bf
- Child:
- 4:5ce2c8864908
Basic state machine structure added;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tverouden | 0:c0c35b95765f | 1 | // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ PREPARATION ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ |
tverouden | 0:c0c35b95765f | 2 | // Libraries |
tverouden | 0:c0c35b95765f | 3 | #include "mbed.h" |
tverouden | 2:d70795e4e0bf | 4 | #include "BiQuad.h" |
tverouden | 0:c0c35b95765f | 5 | #include "FastPWM.h" |
tverouden | 0:c0c35b95765f | 6 | #include "HIDScope.h" |
tverouden | 0:c0c35b95765f | 7 | #include "MODSERIAL.h" |
tverouden | 0:c0c35b95765f | 8 | |
tverouden | 0:c0c35b95765f | 9 | // Inputs & outputs |
tverouden | 0:c0c35b95765f | 10 | DigitalOut redled(LED_RED,1); // red LED K64F |
tverouden | 0:c0c35b95765f | 11 | DigitalOut greenled(LED_GREEN,1); // green LED K64F |
tverouden | 0:c0c35b95765f | 12 | DigitalOut blueled(LED_BLUE,1); // blue LED K64F |
tverouden | 0:c0c35b95765f | 13 | InterruptIn buttonbio1(D0); // button 1 BioRobotics shield |
tverouden | 0:c0c35b95765f | 14 | InterruptIn buttonbio2(D1); // button 2 BioRobotics shield |
tverouden | 0:c0c35b95765f | 15 | InterruptIn buttonK64F(SW3); // button on K64F |
tverouden | 0:c0c35b95765f | 16 | InterruptIn emergencybutton(SW2); // emergency button on K64F |
tverouden | 0:c0c35b95765f | 17 | |
tverouden | 0:c0c35b95765f | 18 | // Define & initialise state machine |
tverouden | 0:c0c35b95765f | 19 | enum states { waiting, calibratingMotors, calibratingEMGx, calibratingEMGy, |
tverouden | 2:d70795e4e0bf | 20 | homing, operating, flipping, failure, demo |
tverouden | 2:d70795e4e0bf | 21 | }; |
tverouden | 0:c0c35b95765f | 22 | states currentState = waiting; // start in waiting mode |
tverouden | 2:d70795e4e0bf | 23 | bool changeState = true; // initialise the first state |
tverouden | 2:d70795e4e0bf | 24 | |
tverouden | 3:9c63fc5f157e | 25 | |
tverouden | 3:9c63fc5f157e | 26 | |
tverouden | 2:d70795e4e0bf | 27 | // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ STATE MACHINE ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ |
tverouden | 3:9c63fc5f157e | 28 | void stateMachine(void) |
tverouden | 3:9c63fc5f157e | 29 | { |
tverouden | 3:9c63fc5f157e | 30 | switch (currentState) { // determine which state Odin is in |
tverouden | 3:9c63fc5f157e | 31 | |
tverouden | 3:9c63fc5f157e | 32 | // =============================== WAITING MODE ================================ |
tverouden | 3:9c63fc5f157e | 33 | case waiting: |
tverouden | 3:9c63fc5f157e | 34 | // ------------------------------ INITIALISATION ------------------------------- |
tverouden | 3:9c63fc5f157e | 35 | if (changeState) { // when entering the state |
tverouden | 3:9c63fc5f157e | 36 | if (externalPC) { // when external pc is connected |
tverouden | 3:9c63fc5f157e | 37 | pc.printf("waiting...\r\n"); // print current state |
tverouden | 3:9c63fc5f157e | 38 | } |
tverouden | 3:9c63fc5f157e | 39 | changeState = false; // stay in this state |
tverouden | 3:9c63fc5f157e | 40 | |
tverouden | 3:9c63fc5f157e | 41 | // Actions when entering state |
tverouden | 3:9c63fc5f157e | 42 | |
tverouden | 3:9c63fc5f157e | 43 | /* */ |
tverouden | 3:9c63fc5f157e | 44 | |
tverouden | 3:9c63fc5f157e | 45 | } |
tverouden | 3:9c63fc5f157e | 46 | // ---------------------------------- ACTION ----------------------------------- |
tverouden | 3:9c63fc5f157e | 47 | // Actions for each loop iteration |
tverouden | 3:9c63fc5f157e | 48 | |
tverouden | 3:9c63fc5f157e | 49 | // -------------------------------- TRANSITION --------------------------------- |
tverouden | 3:9c63fc5f157e | 50 | // Transition condition #1 |
tverouden | 3:9c63fc5f157e | 51 | if () { |
tverouden | 3:9c63fc5f157e | 52 | // Actions when leaving state |
tverouden | 3:9c63fc5f157e | 53 | currentState = ; // change to state |
tverouden | 3:9c63fc5f157e | 54 | changeState = true; // next loop, switch states |
tverouden | 3:9c63fc5f157e | 55 | } |
tverouden | 3:9c63fc5f157e | 56 | break; // end case |
tverouden | 3:9c63fc5f157e | 57 | |
tverouden | 3:9c63fc5f157e | 58 | // ========================== MOTOR CALIBRATION MODE =========================== |
tverouden | 3:9c63fc5f157e | 59 | case calibratingMotors: |
tverouden | 3:9c63fc5f157e | 60 | // ------------------------------ INITIALISATION ------------------------------- |
tverouden | 3:9c63fc5f157e | 61 | if (changeState) { // when entering the state |
tverouden | 3:9c63fc5f157e | 62 | if (externalPC) { // when external pc is connected |
tverouden | 3:9c63fc5f157e | 63 | pc.printf("calibrating motors...r\n"); // print current state |
tverouden | 3:9c63fc5f157e | 64 | } |
tverouden | 3:9c63fc5f157e | 65 | changeState = false; // stay in this state |
tverouden | 3:9c63fc5f157e | 66 | |
tverouden | 3:9c63fc5f157e | 67 | // Actions when entering state |
tverouden | 3:9c63fc5f157e | 68 | |
tverouden | 3:9c63fc5f157e | 69 | /* */ |
tverouden | 3:9c63fc5f157e | 70 | |
tverouden | 3:9c63fc5f157e | 71 | } |
tverouden | 3:9c63fc5f157e | 72 | // ---------------------------------- ACTION ----------------------------------- |
tverouden | 3:9c63fc5f157e | 73 | // Actions for each loop iteration |
tverouden | 3:9c63fc5f157e | 74 | |
tverouden | 3:9c63fc5f157e | 75 | // -------------------------------- TRANSITION --------------------------------- |
tverouden | 3:9c63fc5f157e | 76 | // Transition condition #1 |
tverouden | 3:9c63fc5f157e | 77 | if () { |
tverouden | 3:9c63fc5f157e | 78 | // Actions when leaving state |
tverouden | 3:9c63fc5f157e | 79 | currentState = ; // change to state |
tverouden | 3:9c63fc5f157e | 80 | changeState = true; // next loop, switch states |
tverouden | 3:9c63fc5f157e | 81 | } |
tverouden | 3:9c63fc5f157e | 82 | |
tverouden | 3:9c63fc5f157e | 83 | break; // end case |
tverouden | 3:9c63fc5f157e | 84 | |
tverouden | 3:9c63fc5f157e | 85 | // ================================= DEFAULT =================================== |
tverouden | 3:9c63fc5f157e | 86 | default: |
tverouden | 3:9c63fc5f157e | 87 | } |
tverouden | 3:9c63fc5f157e | 88 | |
tverouden | 3:9c63fc5f157e | 89 | } |
tverouden | 3:9c63fc5f157e | 90 | |
tverouden | 3:9c63fc5f157e | 91 | |
tverouden | 2:d70795e4e0bf | 92 | |
tverouden | 2:d70795e4e0bf | 93 | // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ MAIN LOOP ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ |
tverouden | 2:d70795e4e0bf | 94 | |
tverouden | 3:9c63fc5f157e | 95 | int main() |
tverouden | 3:9c63fc5f157e | 96 | { |
tverouden | 2:d70795e4e0bf | 97 | // ============================== PC-COMMUNICATION ============================= |
tverouden | 2:d70795e4e0bf | 98 | bool externalPC = true; |
tverouden | 2:d70795e4e0bf | 99 | if (externalPC) { |
tverouden | 2:d70795e4e0bf | 100 | MODSERIAL pc(USBTX, USBRX); // communication with pc |
tverouden | 2:d70795e4e0bf | 101 | } |
tverouden | 2:d70795e4e0bf | 102 | // ==================================== LOOP =================================== |
tverouden | 2:d70795e4e0bf | 103 | while (true) { // loop forever |
tverouden | 2:d70795e4e0bf | 104 | |
tverouden | 2:d70795e4e0bf | 105 | } |
tverouden | 2:d70795e4e0bf | 106 | } |