Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
ui.cpp@7:b9a209f889f5, 2017-11-13 (annotated)
- Committer:
- megrootens
- Date:
- Mon Nov 13 10:39:55 2017 +0000
- Revision:
- 7:b9a209f889f5
Moved implementation to separate .cpp files, by using static const variables for constants in namespaces and extern declarations for non-const vars.; Code compiles & runs on a board. **Not yet tested on the actual robot!**
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
megrootens | 7:b9a209f889f5 | 1 | #include "ui.h" |
megrootens | 7:b9a209f889f5 | 2 | #include "robot.h" |
megrootens | 7:b9a209f889f5 | 3 | /** |
megrootens | 7:b9a209f889f5 | 4 | * UI implementation |
megrootens | 7:b9a209f889f5 | 5 | */ |
megrootens | 7:b9a209f889f5 | 6 | namespace ui |
megrootens | 7:b9a209f889f5 | 7 | { |
megrootens | 7:b9a209f889f5 | 8 | State state = IGNORE; |
megrootens | 7:b9a209f889f5 | 9 | |
megrootens | 7:b9a209f889f5 | 10 | DigitalOut rgb_led[] {LED_RED, LED_GREEN, LED_BLUE}; |
megrootens | 7:b9a209f889f5 | 11 | MODSERIAL serial(USBTX,USBRX); |
megrootens | 7:b9a209f889f5 | 12 | |
megrootens | 7:b9a209f889f5 | 13 | /** |
megrootens | 7:b9a209f889f5 | 14 | * Display robot state using (flashing) LEDs |
megrootens | 7:b9a209f889f5 | 15 | */ |
megrootens | 7:b9a209f889f5 | 16 | void StatusDisplay() |
megrootens | 7:b9a209f889f5 | 17 | { |
megrootens | 7:b9a209f889f5 | 18 | switch (robot::state) { |
megrootens | 7:b9a209f889f5 | 19 | case robot::OFF: // continuous red; |
megrootens | 7:b9a209f889f5 | 20 | rgb_led[0] = LED_ON; |
megrootens | 7:b9a209f889f5 | 21 | rgb_led[1] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 22 | rgb_led[2] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 23 | break; |
megrootens | 7:b9a209f889f5 | 24 | case robot::CALIBRATION: // alternating red-green; busy |
megrootens | 7:b9a209f889f5 | 25 | rgb_led[0] = !rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 26 | rgb_led[1] = !rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 27 | rgb_led[2] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 28 | break; |
megrootens | 7:b9a209f889f5 | 29 | case robot::HOMING: // alternating green-blue; busy |
megrootens | 7:b9a209f889f5 | 30 | rgb_led[0] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 31 | rgb_led[1] = !rgb_led[1]; |
megrootens | 7:b9a209f889f5 | 32 | rgb_led[2] = !rgb_led[1]; |
megrootens | 7:b9a209f889f5 | 33 | break; |
megrootens | 7:b9a209f889f5 | 34 | case robot::READY: // continuous green |
megrootens | 7:b9a209f889f5 | 35 | rgb_led[0] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 36 | rgb_led[1] = LED_ON; |
megrootens | 7:b9a209f889f5 | 37 | rgb_led[2] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 38 | break; |
megrootens | 7:b9a209f889f5 | 39 | case robot::DEMO: // alternating red-blue; busy |
megrootens | 7:b9a209f889f5 | 40 | rgb_led[0] = !rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 41 | rgb_led[1] = !LED_ON; |
megrootens | 7:b9a209f889f5 | 42 | rgb_led[2] = !rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 43 | break; |
megrootens | 7:b9a209f889f5 | 44 | case robot::MANUAL: // alternating green-purple |
megrootens | 7:b9a209f889f5 | 45 | rgb_led[0] = !rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 46 | rgb_led[1] = !rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 47 | rgb_led[2] = rgb_led[0]; |
megrootens | 7:b9a209f889f5 | 48 | break; |
megrootens | 7:b9a209f889f5 | 49 | } |
megrootens | 7:b9a209f889f5 | 50 | } |
megrootens | 7:b9a209f889f5 | 51 | |
megrootens | 7:b9a209f889f5 | 52 | |
megrootens | 7:b9a209f889f5 | 53 | /** |
megrootens | 7:b9a209f889f5 | 54 | * Switching UI state to a new state |
megrootens | 7:b9a209f889f5 | 55 | */ |
megrootens | 7:b9a209f889f5 | 56 | void SwitchState(State new_state) |
megrootens | 7:b9a209f889f5 | 57 | { |
megrootens | 7:b9a209f889f5 | 58 | serial.printf("* Switching INPUT State to: %s\r\n",StateNames[new_state]); |
megrootens | 7:b9a209f889f5 | 59 | state = new_state; |
megrootens | 7:b9a209f889f5 | 60 | } |
megrootens | 7:b9a209f889f5 | 61 | |
megrootens | 7:b9a209f889f5 | 62 | |
megrootens | 7:b9a209f889f5 | 63 | void InterruptSwitch2() |
megrootens | 7:b9a209f889f5 | 64 | { |
megrootens | 7:b9a209f889f5 | 65 | if (robot::has_power()) { |
megrootens | 7:b9a209f889f5 | 66 | robot::Stop(); |
megrootens | 7:b9a209f889f5 | 67 | } else { |
megrootens | 7:b9a209f889f5 | 68 | robot::Start(); |
megrootens | 7:b9a209f889f5 | 69 | } |
megrootens | 7:b9a209f889f5 | 70 | } |
megrootens | 7:b9a209f889f5 | 71 | |
megrootens | 7:b9a209f889f5 | 72 | void InterruptSwitch3() |
megrootens | 7:b9a209f889f5 | 73 | { |
megrootens | 7:b9a209f889f5 | 74 | switch (state) { |
megrootens | 7:b9a209f889f5 | 75 | case STATE_SWITCHING: |
megrootens | 7:b9a209f889f5 | 76 | robot::GoToNextState(); |
megrootens | 7:b9a209f889f5 | 77 | break; |
megrootens | 7:b9a209f889f5 | 78 | } |
megrootens | 7:b9a209f889f5 | 79 | } |
megrootens | 7:b9a209f889f5 | 80 | |
megrootens | 7:b9a209f889f5 | 81 | } // end namespace ui |