Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:ae67659d1fca, committed 2015-09-04
- Comitter:
- vsluiter
- Date:
- Fri Sep 04 07:26:58 2015 +0000
- Parent:
- 1:958fbf7ad850
- Child:
- 3:b05acad8736e
- Commit message:
- Assignment4, with enums to make code more readable.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Sep 02 12:57:47 2015 +0000
+++ b/main.cpp Fri Sep 04 07:26:58 2015 +0000
@@ -21,24 +21,55 @@
bool blink_green = false;
bool blink_blue = false;
+//with an enum, you can assign integer values to a name. You don't have to
+//remember the numbers, just remember the names.
+//This is very handy if you want to use this with switch statements.
+//If you compare this to the previous version you'll see
+//that this code is much more readable.
+
+//first part is creating a new datatype, enum blinkstate
+//second part is defining the names between {}
+//third part is creating a variable of the enum blinkstate type.
+enum blinkstates {BLINKRED,BLINKGREEN,BLINKBLUE,BLINKNONE} blink_state;
+
+
+ //function to flip one LED
void flip1led(DigitalOut& led)
{
- led = !led;
+ led.write(!led.read());
}
void blink3Leds()
{
- if(blink_red)
+ //use the enum value!! This is set from the main loop.
+ switch(blink_state) {
+ case BLINKRED:
flip1led(r_led);
- if(blink_green)
+ g_led.write(led_off);
+ b_led.write(led_off);
+ break;
+ case BLINKGREEN:
flip1led(g_led);
- if(blink_blue)
- flip1led(b_led);
+ r_led.write(led_off);
+ b_led.write(led_off);
+ break;
+ case BLINKBLUE:
+ flip1led(b_led);
+ g_led.write(led_off);
+ r_led.write(led_off);
+ break;
+ case BLINKNONE:
+ r_led.write(led_off);
+ g_led.write(led_off);
+ b_led.write(led_off);
+ break;
+ }
}
int main()
{
Ticker ledtick;
+ blink_state = BLINKNONE;//initialize
ledtick.attach(blink3Leds, period_led/2);
r_led.write(led_off);
@@ -46,34 +77,21 @@
b_led.write(led_off);
pc.baud(baudrate);
pc.printf("Hello World!\n");
-
+
while (true) {
- if(pc.readable()) //if character available. If expresseion is non-zero, it's true
- {
- switch(pc.getc()) //read a character
- {
+ if(pc.readable()) { //if character available. If expresseion is non-zero, it's true
+ switch(pc.getc()) { //read a character
case 'r':
- blink_red = true;
- blink_green = false;
- blink_blue = false;
- g_led.write(led_off);
- b_led.write(led_off);
+ blink_state = BLINKRED;//using the enum, we can just use the names defined above. This also makes it easier to extend functionality
break;
case 'g':
- blink_red = false;
- blink_green = true;
- blink_blue = false;
- r_led.write(led_off);
- b_led.write(led_off);
+ blink_state = BLINKGREEN;
break;
case 'b':
- blink_red = false;
- blink_green = false;
- blink_blue = true;
- g_led.write(led_off);
- r_led.write(led_off);
+ blink_state = BLINKBLUE;
break;
default:
+ blink_state = BLINKNONE;
pc.printf("only r g b allowed.\n");
}
}