State machine with EMG functions and parameters

Dependencies:   biquadFilter FastPWM HIDScope MODSERIAL mbed

Fork of StateMachine by Tommie Verouden

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?

UserRevisionLine numberNew 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 }