State machine
Dependencies: mbed Adafruit_GFX BioroboticsMotorControl MODSERIAL BioroboticsEMGFilter
main.cpp@1:cfa5abca6d43, 2018-10-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |