Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
Diff: ui.cpp
- Revision:
- 7:b9a209f889f5
diff -r cddc73091ab5 -r b9a209f889f5 ui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui.cpp Mon Nov 13 10:39:55 2017 +0000 @@ -0,0 +1,81 @@ +#include "ui.h" +#include "robot.h" +/** + * UI implementation + */ +namespace ui +{ +State state = IGNORE; + +DigitalOut rgb_led[] {LED_RED, LED_GREEN, LED_BLUE}; +MODSERIAL serial(USBTX,USBRX); + +/** + * Display robot state using (flashing) LEDs + */ +void StatusDisplay() +{ + switch (robot::state) { + case robot::OFF: // continuous red; + rgb_led[0] = LED_ON; + rgb_led[1] = !LED_ON; + rgb_led[2] = !LED_ON; + break; + case robot::CALIBRATION: // alternating red-green; busy + rgb_led[0] = !rgb_led[0]; + rgb_led[1] = !rgb_led[0]; + rgb_led[2] = !LED_ON; + break; + case robot::HOMING: // alternating green-blue; busy + rgb_led[0] = !LED_ON; + rgb_led[1] = !rgb_led[1]; + rgb_led[2] = !rgb_led[1]; + break; + case robot::READY: // continuous green + rgb_led[0] = !LED_ON; + rgb_led[1] = LED_ON; + rgb_led[2] = !LED_ON; + break; + case robot::DEMO: // alternating red-blue; busy + rgb_led[0] = !rgb_led[0]; + rgb_led[1] = !LED_ON; + rgb_led[2] = !rgb_led[0]; + break; + case robot::MANUAL: // alternating green-purple + rgb_led[0] = !rgb_led[0]; + rgb_led[1] = !rgb_led[0]; + rgb_led[2] = rgb_led[0]; + break; + } +} + + +/** + * Switching UI state to a new state + */ +void SwitchState(State new_state) +{ + serial.printf("* Switching INPUT State to: %s\r\n",StateNames[new_state]); + state = new_state; +} + + +void InterruptSwitch2() +{ + if (robot::has_power()) { + robot::Stop(); + } else { + robot::Start(); + } +} + +void InterruptSwitch3() +{ + switch (state) { + case STATE_SWITCHING: + robot::GoToNextState(); + break; + } +} + +} // end namespace ui \ No newline at end of file