State machine

Dependencies:   mbed Adafruit_GFX BioroboticsMotorControl MODSERIAL BioroboticsEMGFilter

Committer:
brass_phoenix
Date:
Tue Oct 30 11:01:00 2018 +0000
Revision:
1:cfa5abca6d43
Parent:
0:7d25c2ade6c5
Child:
2:141cfcafe72b
+ Button inputs.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MAHCSnijders 0:7d25c2ade6c5 1 #include "mbed.h"
MAHCSnijders 0:7d25c2ade6c5 2
brass_phoenix 1:cfa5abca6d43 3 #include "Button.h"
MAHCSnijders 0:7d25c2ade6c5 4
brass_phoenix 1:cfa5abca6d43 5
brass_phoenix 1:cfa5abca6d43 6 enum States {waiting, calib_motor, calib_bicep1, calib_bicep2, homing, operation, failure}; // The possible states of the state machine
MAHCSnijders 0:7d25c2ade6c5 7
MAHCSnijders 0:7d25c2ade6c5 8 // Global variables
MAHCSnijders 0:7d25c2ade6c5 9 const double PI = 3.14159265359;
brass_phoenix 1:cfa5abca6d43 10 // Main loop wait time per cycle. This does not influence the motor PID or EMG reading frequencies.
brass_phoenix 1:cfa5abca6d43 11 const double main_loop_wait_time = 0.01;
brass_phoenix 1:cfa5abca6d43 12
brass_phoenix 1:cfa5abca6d43 13
brass_phoenix 1:cfa5abca6d43 14 States current_state; // Defining the state we are currently in
MAHCSnijders 0:7d25c2ade6c5 15 Ticker loop_ticker; // Ticker for the loop function
brass_phoenix 1:cfa5abca6d43 16
brass_phoenix 1:cfa5abca6d43 17 // Order of buttons: up_down, left_right, panic
brass_phoenix 1:cfa5abca6d43 18 // D2, D3, D8
brass_phoenix 1:cfa5abca6d43 19 Button ud_button(PTA4);
brass_phoenix 1:cfa5abca6d43 20 Button lr_button(PTC6);
brass_phoenix 1:cfa5abca6d43 21 Button p_button(D8);
MAHCSnijders 0:7d25c2ade6c5 22
brass_phoenix 1:cfa5abca6d43 23 DigitalOut led_red(LED_RED);
brass_phoenix 1:cfa5abca6d43 24 DigitalOut led_green(LED_GREEN);
brass_phoenix 1:cfa5abca6d43 25
brass_phoenix 1:cfa5abca6d43 26 void main_loop()
brass_phoenix 1:cfa5abca6d43 27 {
brass_phoenix 1:cfa5abca6d43 28 ud_button.update();
brass_phoenix 1:cfa5abca6d43 29 lr_button.update();
brass_phoenix 1:cfa5abca6d43 30 p_button.update();
MAHCSnijders 0:7d25c2ade6c5 31
MAHCSnijders 0:7d25c2ade6c5 32
brass_phoenix 1:cfa5abca6d43 33 led_red = !ud_button.has_just_been_pressed();
brass_phoenix 1:cfa5abca6d43 34
brass_phoenix 1:cfa5abca6d43 35 led_green = lr_button.is_pressed();
brass_phoenix 1:cfa5abca6d43 36
brass_phoenix 1:cfa5abca6d43 37 switch (current_state) {
brass_phoenix 1:cfa5abca6d43 38 case waiting:
brass_phoenix 1:cfa5abca6d43 39 //do_state_waiting():
brass_phoenix 1:cfa5abca6d43 40 break;
brass_phoenix 1:cfa5abca6d43 41 case calib_motor:
brass_phoenix 1:cfa5abca6d43 42 //do_state_calib_motor():
brass_phoenix 1:cfa5abca6d43 43 break;
brass_phoenix 1:cfa5abca6d43 44 case calib_bicep1:
brass_phoenix 1:cfa5abca6d43 45 //do_state_calib_bicep1():
brass_phoenix 1:cfa5abca6d43 46 break;
brass_phoenix 1:cfa5abca6d43 47 case calib_bicep2:
brass_phoenix 1:cfa5abca6d43 48 //do_state_calib_bicep2():
brass_phoenix 1:cfa5abca6d43 49 break;
brass_phoenix 1:cfa5abca6d43 50 case homing:
brass_phoenix 1:cfa5abca6d43 51 //do_state_homing():
brass_phoenix 1:cfa5abca6d43 52 break;
brass_phoenix 1:cfa5abca6d43 53 case operation:
brass_phoenix 1:cfa5abca6d43 54 //do_state_operation():
brass_phoenix 1:cfa5abca6d43 55 break;
brass_phoenix 1:cfa5abca6d43 56 case failure:
brass_phoenix 1:cfa5abca6d43 57 //do_state_failure():
brass_phoenix 1:cfa5abca6d43 58 break;
brass_phoenix 1:cfa5abca6d43 59 }
brass_phoenix 1:cfa5abca6d43 60
brass_phoenix 1:cfa5abca6d43 61 }
MAHCSnijders 0:7d25c2ade6c5 62
brass_phoenix 1:cfa5abca6d43 63 int main()
brass_phoenix 1:cfa5abca6d43 64 {
brass_phoenix 1:cfa5abca6d43 65 led_red = 1;
brass_phoenix 1:cfa5abca6d43 66 current_state = waiting;
brass_phoenix 1:cfa5abca6d43 67 while (true) {
brass_phoenix 1:cfa5abca6d43 68 main_loop();
brass_phoenix 1:cfa5abca6d43 69 wait(main_loop_wait_time);
brass_phoenix 1:cfa5abca6d43 70 }
brass_phoenix 1:cfa5abca6d43 71 }