Demo code minor BioRobotics 2016 University of Twente, Enschede, NL Homework set 1, Exercise 9, Example solution
Revision 0:2e3d70904234, committed 2016-09-08
- Comitter:
- megrootens
- Date:
- Thu Sep 08 14:20:53 2016 +0000
- Commit message:
- working answer
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 2e3d70904234 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 08 14:20:53 2016 +0000 @@ -0,0 +1,99 @@ +/** + * Minor BioRobotics 2016 + * + * Programming Homework Set 1 + * Exercise 9, example solution + * + * M.E. Grootens [at] utwente.nl, + * v0.1, 08.09.2016 + */ + +#include "mbed.h" + +#define SERIAL_BAUD 115200 // baud rate for serial communication + +// Serial communication with PC +Serial pc(USBTX,USBRX); + +// The LEDs that show the state +DigitalOut led_red(LED_RED); +DigitalOut led_green(LED_GREEN); +DigitalOut led_blue(LED_BLUE); + +// Number of states (constant!) +const int kNumStates = 3; +// Current state, volatile because modified by interrupt +volatile int state = 0; + + +/** + * Show the state through the LEDs and print to terminal + * @ensure red if s==0, green for s==1, blue for s==2 + */ +void ShowState() { + pc.printf("state = %d\r\n",state); + + switch (state) { + case 0: { + // red on, rest off + led_red.write(0); // on + led_green.write(1); // off + led_blue.write(1); // off + break; + } + case 1: { + // green on, rest off + led_red.write(1); // off + led_green.write(0); // on + led_blue.write(1); // off + break; + } + case 2: { + // blue on, rest off + led_red.write(1); // off + led_green.write(1); // off + led_blue.write(0); // on + break; + } + default: { + // this shoud not occur + break; + } + } +} + +/** + * Switch the state and display the state by LEDs + * @ensure state = ++state % kNumStates + */ +void SwitchState() { + state++; + if (state>=kNumStates) { + // could also use modulo ('%') operator + state = 0; + } + + // use the LEDs to show the state + ShowState(); +} + +/** + * Main function. + */ +int main() +{ + // Serial communication + pc.baud(SERIAL_BAUD); + pc.printf("\r\n**BOARD RESET**\r\n"); + + // Show the current state through LEDs + // state = 0, so red led should be on + ShowState(); + + // Interrupt; call SwitchState when button pressed + InterruptIn sw2(SW2); + sw2.fall(&SwitchState); + + // Infinite loop; does nothing but needs to prevent termination + while (true); +} \ No newline at end of file
diff -r 000000000000 -r 2e3d70904234 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Sep 08 14:20:53 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/2e9cc70d1897 \ No newline at end of file