Lab 1 Number 5

Fork of thread-example2 by William Marsh

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?

UserRevisionLine numberNew 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 }