![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Lab 1 Number 5
Fork of thread-example2 by
main.cpp@1:a542052a259f, 2018-01-20 (annotated)
- Committer:
- dhenis
- Date:
- Sat Jan 20 23:03:07 2018 +0000
- Revision:
- 1:a542052a259f
- Parent:
- 0:83abbbeb9a3d
1 lab number 5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WilliamMarshQMUL | 0:83abbbeb9a3d | 1 | // Simple Example fo use of Threads on mbed OS 5 |
WilliamMarshQMUL | 0:83abbbeb9a3d | 2 | // Only need to include mbed.h |
WilliamMarshQMUL | 0:83abbbeb9a3d | 3 | |
WilliamMarshQMUL | 0:83abbbeb9a3d | 4 | #include "mbed.h" |
WilliamMarshQMUL | 0:83abbbeb9a3d | 5 | |
dhenis | 1:a542052a259f | 6 | #include "rtos.h" |
dhenis | 1:a542052a259f | 7 | |
dhenis | 1:a542052a259f | 8 | Serial pc(USBTX, USBRX); // tx, rx |
WilliamMarshQMUL | 0:83abbbeb9a3d | 9 | // Variable for a second thread |
WilliamMarshQMUL | 0:83abbbeb9a3d | 10 | Thread thread; |
WilliamMarshQMUL | 0:83abbbeb9a3d | 11 | |
dhenis | 1:a542052a259f | 12 | DigitalOut myled1(LED1); |
dhenis | 1:a542052a259f | 13 | DigitalOut myled2(LED2); |
dhenis | 1:a542052a259f | 14 | DigitalOut myled3(LED3); |
WilliamMarshQMUL | 0:83abbbeb9a3d | 15 | |
dhenis | 1:a542052a259f | 16 | int speed = 200; // global variable |
WilliamMarshQMUL | 0:83abbbeb9a3d | 17 | // This method is run in the second thread |
WilliamMarshQMUL | 0:83abbbeb9a3d | 18 | void ledB_thread() { |
dhenis | 1:a542052a259f | 19 | |
dhenis | 1:a542052a259f | 20 | // serial |
dhenis | 1:a542052a259f | 21 | |
dhenis | 1:a542052a259f | 22 | char c ; |
dhenis | 1:a542052a259f | 23 | pc.printf("Enter a character>"); |
dhenis | 1:a542052a259f | 24 | while(1) { |
dhenis | 1:a542052a259f | 25 | myled1 = 1; // turn on |
dhenis | 1:a542052a259f | 26 | c = pc.getc(); |
dhenis | 1:a542052a259f | 27 | pc.putc(c); |
dhenis | 1:a542052a259f | 28 | pc.putc('\r'); |
dhenis | 1:a542052a259f | 29 | pc.putc('\n'); |
dhenis | 1:a542052a259f | 30 | Thread::wait(200); |
dhenis | 1:a542052a259f | 31 | pc.printf("Enter 'S' for slower and 'F' for faster : "); |
dhenis | 1:a542052a259f | 32 | pc.putc('\n'); |
dhenis | 1:a542052a259f | 33 | |
dhenis | 1:a542052a259f | 34 | // 200ms, 400ms, 800ms and 1600ms |
dhenis | 1:a542052a259f | 35 | |
dhenis | 1:a542052a259f | 36 | if(c == 'f'){ |
dhenis | 1:a542052a259f | 37 | |
dhenis | 1:a542052a259f | 38 | speed /= 2; |
dhenis | 1:a542052a259f | 39 | |
dhenis | 1:a542052a259f | 40 | // interlocking |
dhenis | 1:a542052a259f | 41 | if (speed <=200){ speed = 200;} |
dhenis | 1:a542052a259f | 42 | |
dhenis | 1:a542052a259f | 43 | |
dhenis | 1:a542052a259f | 44 | }else if(c == 's'){ |
dhenis | 1:a542052a259f | 45 | |
dhenis | 1:a542052a259f | 46 | speed *= 2; |
dhenis | 1:a542052a259f | 47 | |
dhenis | 1:a542052a259f | 48 | // interlocking |
dhenis | 1:a542052a259f | 49 | if (speed >=1600){ speed = 1600;} |
dhenis | 1:a542052a259f | 50 | } |
dhenis | 1:a542052a259f | 51 | |
dhenis | 1:a542052a259f | 52 | |
dhenis | 1:a542052a259f | 53 | |
dhenis | 1:a542052a259f | 54 | //yled1 = 0; // turn off |
dhenis | 1:a542052a259f | 55 | } |
dhenis | 1:a542052a259f | 56 | // |
dhenis | 1:a542052a259f | 57 | // while (true) { |
dhenis | 1:a542052a259f | 58 | // Thread::wait(1000); |
dhenis | 1:a542052a259f | 59 | // myled1 = 1; |
dhenis | 1:a542052a259f | 60 | // } |
WilliamMarshQMUL | 0:83abbbeb9a3d | 61 | } |
WilliamMarshQMUL | 0:83abbbeb9a3d | 62 | |
WilliamMarshQMUL | 0:83abbbeb9a3d | 63 | // This is the main thread |
WilliamMarshQMUL | 0:83abbbeb9a3d | 64 | int main (void) { |
dhenis | 1:a542052a259f | 65 | |
WilliamMarshQMUL | 0:83abbbeb9a3d | 66 | |
WilliamMarshQMUL | 0:83abbbeb9a3d | 67 | // start the second thread |
WilliamMarshQMUL | 0:83abbbeb9a3d | 68 | thread.start(callback(ledB_thread)); |
dhenis | 1:a542052a259f | 69 | |
dhenis | 1:a542052a259f | 70 | |
dhenis | 1:a542052a259f | 71 | // blinky led in step 3 |
WilliamMarshQMUL | 0:83abbbeb9a3d | 72 | |
dhenis | 1:a542052a259f | 73 | int state = 1; |
dhenis | 1:a542052a259f | 74 | while(1) { |
dhenis | 1:a542052a259f | 75 | Thread::wait(speed); |
dhenis | 1:a542052a259f | 76 | switch(state){ |
dhenis | 1:a542052a259f | 77 | // case 0: |
dhenis | 1:a542052a259f | 78 | // Thread::wait(1500); |
dhenis | 1:a542052a259f | 79 | // myled1 = 1; |
dhenis | 1:a542052a259f | 80 | // |
dhenis | 1:a542052a259f | 81 | // break; |
dhenis | 1:a542052a259f | 82 | |
dhenis | 1:a542052a259f | 83 | case 1: |
dhenis | 1:a542052a259f | 84 | |
dhenis | 1:a542052a259f | 85 | |
dhenis | 1:a542052a259f | 86 | myled1 = 1; // turn off |
dhenis | 1:a542052a259f | 87 | |
dhenis | 1:a542052a259f | 88 | myled2 = 1; |
dhenis | 1:a542052a259f | 89 | |
dhenis | 1:a542052a259f | 90 | myled3 = 1; |
dhenis | 1:a542052a259f | 91 | |
dhenis | 1:a542052a259f | 92 | |
dhenis | 1:a542052a259f | 93 | break; |
dhenis | 1:a542052a259f | 94 | |
dhenis | 1:a542052a259f | 95 | case 2: |
dhenis | 1:a542052a259f | 96 | |
dhenis | 1:a542052a259f | 97 | |
dhenis | 1:a542052a259f | 98 | myled1 = 0; // turn on |
dhenis | 1:a542052a259f | 99 | |
dhenis | 1:a542052a259f | 100 | myled2 = 1; |
dhenis | 1:a542052a259f | 101 | |
dhenis | 1:a542052a259f | 102 | myled3 = 1; |
dhenis | 1:a542052a259f | 103 | |
dhenis | 1:a542052a259f | 104 | |
dhenis | 1:a542052a259f | 105 | |
dhenis | 1:a542052a259f | 106 | |
dhenis | 1:a542052a259f | 107 | break; |
dhenis | 1:a542052a259f | 108 | |
dhenis | 1:a542052a259f | 109 | case 3: |
dhenis | 1:a542052a259f | 110 | |
dhenis | 1:a542052a259f | 111 | |
dhenis | 1:a542052a259f | 112 | myled1 = 0; // turn on |
dhenis | 1:a542052a259f | 113 | |
dhenis | 1:a542052a259f | 114 | myled2 = 0; |
dhenis | 1:a542052a259f | 115 | |
dhenis | 1:a542052a259f | 116 | myled3 = 1; |
dhenis | 1:a542052a259f | 117 | |
dhenis | 1:a542052a259f | 118 | |
dhenis | 1:a542052a259f | 119 | break; |
dhenis | 1:a542052a259f | 120 | |
dhenis | 1:a542052a259f | 121 | case 4: |
dhenis | 1:a542052a259f | 122 | |
dhenis | 1:a542052a259f | 123 | myled1 = 0; // turn on |
dhenis | 1:a542052a259f | 124 | |
dhenis | 1:a542052a259f | 125 | myled2 = 0; |
dhenis | 1:a542052a259f | 126 | |
dhenis | 1:a542052a259f | 127 | myled3 = 0; |
dhenis | 1:a542052a259f | 128 | |
dhenis | 1:a542052a259f | 129 | |
dhenis | 1:a542052a259f | 130 | break; |
dhenis | 1:a542052a259f | 131 | |
dhenis | 1:a542052a259f | 132 | } |
dhenis | 1:a542052a259f | 133 | |
dhenis | 1:a542052a259f | 134 | state ++; |
dhenis | 1:a542052a259f | 135 | |
dhenis | 1:a542052a259f | 136 | if(state >4){ |
dhenis | 1:a542052a259f | 137 | state =1 ; |
dhenis | 1:a542052a259f | 138 | } |
WilliamMarshQMUL | 0:83abbbeb9a3d | 139 | } |
dhenis | 1:a542052a259f | 140 | |
dhenis | 1:a542052a259f | 141 | |
dhenis | 1:a542052a259f | 142 | // |
dhenis | 1:a542052a259f | 143 | // while (true) { |
dhenis | 1:a542052a259f | 144 | // Thread::wait(400); |
dhenis | 1:a542052a259f | 145 | // // blinky led |
dhenis | 1:a542052a259f | 146 | // |
dhenis | 1:a542052a259f | 147 | // |
dhenis | 1:a542052a259f | 148 | // |
dhenis | 1:a542052a259f | 149 | // |
dhenis | 1:a542052a259f | 150 | // |
dhenis | 1:a542052a259f | 151 | // ledA = !ledA; |
dhenis | 1:a542052a259f | 152 | // } |
WilliamMarshQMUL | 0:83abbbeb9a3d | 153 | } |