Assignment 3 and 4. Both in commits.

Dependencies:   MODSERIAL mbed

Committer:
vsluiter
Date:
Fri Sep 04 08:27:05 2015 +0000
Revision:
3:b05acad8736e
Parent:
2:ae67659d1fca
Small change to better explain the enum type.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:86aaef96170e 1 #include "mbed.h"
vsluiter 0:86aaef96170e 2 #include "MODSERIAL.h"
vsluiter 0:86aaef96170e 3
vsluiter 1:958fbf7ad850 4 DigitalOut r_led(LED_RED);
vsluiter 1:958fbf7ad850 5 DigitalOut g_led(LED_GREEN);
vsluiter 1:958fbf7ad850 6 DigitalOut b_led(LED_BLUE);
vsluiter 1:958fbf7ad850 7
vsluiter 0:86aaef96170e 8 DigitalIn button(PTA4);
vsluiter 0:86aaef96170e 9 MODSERIAL pc(USBTX, USBRX);
vsluiter 0:86aaef96170e 10
vsluiter 0:86aaef96170e 11 const int baudrate = 115200;
vsluiter 1:958fbf7ad850 12 //const int ms_wait = 100;
vsluiter 0:86aaef96170e 13
vsluiter 1:958fbf7ad850 14 const float period_led = 0.2;
vsluiter 0:86aaef96170e 15
vsluiter 0:86aaef96170e 16 const int led_on = 0;
vsluiter 0:86aaef96170e 17 const int led_off = 1;
vsluiter 0:86aaef96170e 18
vsluiter 0:86aaef96170e 19
vsluiter 1:958fbf7ad850 20 bool blink_red = false;
vsluiter 1:958fbf7ad850 21 bool blink_green = false;
vsluiter 1:958fbf7ad850 22 bool blink_blue = false;
vsluiter 0:86aaef96170e 23
vsluiter 2:ae67659d1fca 24 //with an enum, you can assign integer values to a name. You don't have to
vsluiter 2:ae67659d1fca 25 //remember the numbers, just remember the names.
vsluiter 2:ae67659d1fca 26 //This is very handy if you want to use this with switch statements.
vsluiter 2:ae67659d1fca 27 //If you compare this to the previous version you'll see
vsluiter 2:ae67659d1fca 28 //that this code is much more readable.
vsluiter 2:ae67659d1fca 29
vsluiter 2:ae67659d1fca 30 //first part is creating a new datatype, enum blinkstate
vsluiter 2:ae67659d1fca 31 //second part is defining the names between {}
vsluiter 3:b05acad8736e 32 enum BlinkState {BLINKRED,BLINKGREEN,BLINKBLUE,BLINKNONE};
vsluiter 3:b05acad8736e 33
vsluiter 3:b05acad8736e 34 //we now have a new datatype BlinkState. Just as with
vsluiter 3:b05acad8736e 35 //floats and ints, we can create a new variable and initialize it:
vsluiter 3:b05acad8736e 36 BlinkState blink_state = BLINKNONE;
vsluiter 2:ae67659d1fca 37
vsluiter 2:ae67659d1fca 38
vsluiter 2:ae67659d1fca 39 //function to flip one LED
vsluiter 1:958fbf7ad850 40 void flip1led(DigitalOut& led)
vsluiter 0:86aaef96170e 41 {
vsluiter 2:ae67659d1fca 42 led.write(!led.read());
vsluiter 1:958fbf7ad850 43 }
vsluiter 1:958fbf7ad850 44
vsluiter 1:958fbf7ad850 45 void blink3Leds()
vsluiter 1:958fbf7ad850 46 {
vsluiter 2:ae67659d1fca 47 //use the enum value!! This is set from the main loop.
vsluiter 2:ae67659d1fca 48 switch(blink_state) {
vsluiter 2:ae67659d1fca 49 case BLINKRED:
vsluiter 1:958fbf7ad850 50 flip1led(r_led);
vsluiter 2:ae67659d1fca 51 g_led.write(led_off);
vsluiter 2:ae67659d1fca 52 b_led.write(led_off);
vsluiter 2:ae67659d1fca 53 break;
vsluiter 2:ae67659d1fca 54 case BLINKGREEN:
vsluiter 1:958fbf7ad850 55 flip1led(g_led);
vsluiter 2:ae67659d1fca 56 r_led.write(led_off);
vsluiter 2:ae67659d1fca 57 b_led.write(led_off);
vsluiter 2:ae67659d1fca 58 break;
vsluiter 2:ae67659d1fca 59 case BLINKBLUE:
vsluiter 2:ae67659d1fca 60 flip1led(b_led);
vsluiter 2:ae67659d1fca 61 g_led.write(led_off);
vsluiter 2:ae67659d1fca 62 r_led.write(led_off);
vsluiter 2:ae67659d1fca 63 break;
vsluiter 2:ae67659d1fca 64 case BLINKNONE:
vsluiter 2:ae67659d1fca 65 r_led.write(led_off);
vsluiter 2:ae67659d1fca 66 g_led.write(led_off);
vsluiter 2:ae67659d1fca 67 b_led.write(led_off);
vsluiter 2:ae67659d1fca 68 break;
vsluiter 2:ae67659d1fca 69 }
vsluiter 0:86aaef96170e 70 }
vsluiter 0:86aaef96170e 71
vsluiter 0:86aaef96170e 72 int main()
vsluiter 0:86aaef96170e 73 {
vsluiter 1:958fbf7ad850 74 Ticker ledtick;
vsluiter 1:958fbf7ad850 75 ledtick.attach(blink3Leds, period_led/2);
vsluiter 1:958fbf7ad850 76
vsluiter 1:958fbf7ad850 77 r_led.write(led_off);
vsluiter 1:958fbf7ad850 78 g_led.write(led_off);
vsluiter 1:958fbf7ad850 79 b_led.write(led_off);
vsluiter 0:86aaef96170e 80 pc.baud(baudrate);
vsluiter 0:86aaef96170e 81 pc.printf("Hello World!\n");
vsluiter 2:ae67659d1fca 82
vsluiter 0:86aaef96170e 83 while (true) {
vsluiter 2:ae67659d1fca 84 if(pc.readable()) { //if character available. If expresseion is non-zero, it's true
vsluiter 2:ae67659d1fca 85 switch(pc.getc()) { //read a character
vsluiter 1:958fbf7ad850 86 case 'r':
vsluiter 2:ae67659d1fca 87 blink_state = BLINKRED;//using the enum, we can just use the names defined above. This also makes it easier to extend functionality
vsluiter 1:958fbf7ad850 88 break;
vsluiter 1:958fbf7ad850 89 case 'g':
vsluiter 2:ae67659d1fca 90 blink_state = BLINKGREEN;
vsluiter 1:958fbf7ad850 91 break;
vsluiter 1:958fbf7ad850 92 case 'b':
vsluiter 2:ae67659d1fca 93 blink_state = BLINKBLUE;
vsluiter 1:958fbf7ad850 94 break;
vsluiter 1:958fbf7ad850 95 default:
vsluiter 2:ae67659d1fca 96 blink_state = BLINKNONE;
vsluiter 1:958fbf7ad850 97 pc.printf("only r g b allowed.\n");
vsluiter 1:958fbf7ad850 98 }
vsluiter 0:86aaef96170e 99 }
vsluiter 0:86aaef96170e 100 }
vsluiter 0:86aaef96170e 101 }