First Last
/
Minor_Assignment3_4
Assignment 3 and 4. Both in commits.
main.cpp@3:b05acad8736e, 2015-09-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |