Code to let Gr20's BioRobotics2017 robot come to live.

Dependencies:   FastPWM MODSERIAL QEI mbed

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?

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