Sebastian Barrera
/
Lab5_part1
Part 1
main.cpp@7:002686a28225, 2020-03-16 (annotated)
- Committer:
- sebbarpar
- Date:
- Mon Mar 16 12:05:45 2020 +0000
- Revision:
- 7:002686a28225
- Parent:
- 6:71ef35e456ab
Part 1 finished;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WilliamMarshQMUL | 0:4374caa1ef17 | 1 | #include "mbed.h" |
WilliamMarshQMUL | 0:4374caa1ef17 | 2 | #include "TSISensor.h" |
WilliamMarshQMUL | 0:4374caa1ef17 | 3 | |
sebbarpar | 7:002686a28225 | 4 | //Lab 5 part 1 |
sebbarpar | 7:002686a28225 | 5 | //LED light up according to which button is pressed |
WilliamMarshQMUL | 0:4374caa1ef17 | 6 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 7 | Serial pc(USBTX, USBRX); // tx, rx |
sebbarpar | 7:002686a28225 | 8 | DigitalOut led1(PTD3,0); |
sebbarpar | 7:002686a28225 | 9 | DigitalOut led2(PTD5,0); |
sebbarpar | 7:002686a28225 | 10 | DigitalOut led3(PTD0,0); |
sebbarpar | 7:002686a28225 | 11 | DigitalOut led4(PTD2,0); |
WilliamMarshQMUL | 0:4374caa1ef17 | 12 | TSISensor tsi; |
WilliamMarshQMUL | 0:4374caa1ef17 | 13 | |
sebbarpar | 7:002686a28225 | 14 | Thread l_out ; |
sebbarpar | 7:002686a28225 | 15 | Thread l_in ; |
sebbarpar | 7:002686a28225 | 16 | Thread r_out ; |
sebbarpar | 7:002686a28225 | 17 | Thread r_in ; |
sebbarpar | 7:002686a28225 | 18 | |
sebbarpar | 7:002686a28225 | 19 | enum pos{neutral, lo, li, ri, ro}; |
sebbarpar | 7:002686a28225 | 20 | enum ledonoff{on, off}; |
sebbarpar | 7:002686a28225 | 21 | |
sebbarpar | 7:002686a28225 | 22 | # define lout 0x01 |
sebbarpar | 7:002686a28225 | 23 | # define lin 0x02 |
sebbarpar | 7:002686a28225 | 24 | # define rin 0x04 |
sebbarpar | 7:002686a28225 | 25 | # define rout 0x08 |
sebbarpar | 7:002686a28225 | 26 | |
sebbarpar | 7:002686a28225 | 27 | EventFlags signals; |
WilliamMarshQMUL | 5:2a9a3d74a1d8 | 28 | |
sebbarpar | 7:002686a28225 | 29 | void leftout() { |
sebbarpar | 7:002686a28225 | 30 | int l1=on; |
WilliamMarshQMUL | 0:4374caa1ef17 | 31 | while (true) { |
sebbarpar | 7:002686a28225 | 32 | switch (l1){ |
sebbarpar | 7:002686a28225 | 33 | case on: |
sebbarpar | 7:002686a28225 | 34 | signals.wait_any(lout);//Wait until flag |
sebbarpar | 7:002686a28225 | 35 | //pc.printf("lo "); |
sebbarpar | 7:002686a28225 | 36 | led1=1; |
sebbarpar | 7:002686a28225 | 37 | l1=off;//Turn LED on or off |
sebbarpar | 7:002686a28225 | 38 | signals.clear(lout); |
sebbarpar | 7:002686a28225 | 39 | break; |
sebbarpar | 7:002686a28225 | 40 | case off: |
sebbarpar | 7:002686a28225 | 41 | signals.wait_any(lout); |
sebbarpar | 7:002686a28225 | 42 | //pc.printf("lo "); |
sebbarpar | 7:002686a28225 | 43 | led1=0; |
sebbarpar | 7:002686a28225 | 44 | l1=on; |
sebbarpar | 7:002686a28225 | 45 | signals.clear(lout); |
sebbarpar | 7:002686a28225 | 46 | break; |
sebbarpar | 7:002686a28225 | 47 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 48 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 49 | } |
sebbarpar | 7:002686a28225 | 50 | void leftin() { |
sebbarpar | 7:002686a28225 | 51 | int l2=on; |
sebbarpar | 7:002686a28225 | 52 | while (true) { |
sebbarpar | 7:002686a28225 | 53 | switch (l2){ |
sebbarpar | 7:002686a28225 | 54 | case on: |
sebbarpar | 7:002686a28225 | 55 | signals.wait_any(lin); |
sebbarpar | 7:002686a28225 | 56 | //pc.printf("li "); |
sebbarpar | 7:002686a28225 | 57 | led2=1; |
sebbarpar | 7:002686a28225 | 58 | l2=off; |
sebbarpar | 7:002686a28225 | 59 | signals.clear(lin); |
sebbarpar | 7:002686a28225 | 60 | break; |
sebbarpar | 7:002686a28225 | 61 | case off: |
sebbarpar | 7:002686a28225 | 62 | signals.wait_any(lin); |
sebbarpar | 7:002686a28225 | 63 | //pc.printf("li "); |
sebbarpar | 7:002686a28225 | 64 | led2=0; |
sebbarpar | 7:002686a28225 | 65 | l2=on; |
sebbarpar | 7:002686a28225 | 66 | signals.clear(lin); |
sebbarpar | 7:002686a28225 | 67 | break; |
sebbarpar | 7:002686a28225 | 68 | } |
sebbarpar | 7:002686a28225 | 69 | } |
sebbarpar | 7:002686a28225 | 70 | } |
sebbarpar | 7:002686a28225 | 71 | void rightin() { |
sebbarpar | 7:002686a28225 | 72 | int l3=on; |
WilliamMarshQMUL | 0:4374caa1ef17 | 73 | while (true) { |
sebbarpar | 7:002686a28225 | 74 | switch (l3){ |
sebbarpar | 7:002686a28225 | 75 | case on: |
sebbarpar | 7:002686a28225 | 76 | signals.wait_any(rin); |
sebbarpar | 7:002686a28225 | 77 | //pc.printf("ri "); |
sebbarpar | 7:002686a28225 | 78 | led3=1; |
sebbarpar | 7:002686a28225 | 79 | l3=off; |
sebbarpar | 7:002686a28225 | 80 | signals.clear(rin); |
sebbarpar | 7:002686a28225 | 81 | break; |
sebbarpar | 7:002686a28225 | 82 | case off: |
sebbarpar | 7:002686a28225 | 83 | signals.wait_any(rin); |
sebbarpar | 7:002686a28225 | 84 | //pc.printf("ri "); |
sebbarpar | 7:002686a28225 | 85 | led3=0; |
sebbarpar | 7:002686a28225 | 86 | l3=on; |
sebbarpar | 7:002686a28225 | 87 | signals.clear(rin); |
sebbarpar | 7:002686a28225 | 88 | break; |
sebbarpar | 7:002686a28225 | 89 | } |
sebbarpar | 7:002686a28225 | 90 | } |
sebbarpar | 7:002686a28225 | 91 | } |
sebbarpar | 7:002686a28225 | 92 | void rightout() { |
sebbarpar | 7:002686a28225 | 93 | int l4=on; |
sebbarpar | 7:002686a28225 | 94 | while (true) { |
sebbarpar | 7:002686a28225 | 95 | switch (l4){ |
sebbarpar | 7:002686a28225 | 96 | case on: |
sebbarpar | 7:002686a28225 | 97 | signals.wait_any(rout); |
sebbarpar | 7:002686a28225 | 98 | //pc.printf("ro "); |
sebbarpar | 7:002686a28225 | 99 | led4=1; |
sebbarpar | 7:002686a28225 | 100 | l4=off; |
sebbarpar | 7:002686a28225 | 101 | signals.clear(rout); |
sebbarpar | 7:002686a28225 | 102 | break; |
sebbarpar | 7:002686a28225 | 103 | case off: |
sebbarpar | 7:002686a28225 | 104 | signals.wait_any(rout); |
sebbarpar | 7:002686a28225 | 105 | //pc.printf("ro "); |
sebbarpar | 7:002686a28225 | 106 | led4=0; |
sebbarpar | 7:002686a28225 | 107 | l4=on; |
sebbarpar | 7:002686a28225 | 108 | signals.clear(rout); |
sebbarpar | 7:002686a28225 | 109 | break; |
sebbarpar | 7:002686a28225 | 110 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 111 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 112 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 113 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 114 | int main(void) { |
sebbarpar | 7:002686a28225 | 115 | int pos=neutral; |
sebbarpar | 7:002686a28225 | 116 | uint8_t d; |
sebbarpar | 7:002686a28225 | 117 | pc.printf("START"); |
sebbarpar | 7:002686a28225 | 118 | l_out.start(leftout) ; |
sebbarpar | 7:002686a28225 | 119 | l_in.start(leftin) ; |
sebbarpar | 7:002686a28225 | 120 | r_in.start(rightin); |
sebbarpar | 7:002686a28225 | 121 | r_out.start(rightout); |
WilliamMarshQMUL | 0:4374caa1ef17 | 122 | |
WilliamMarshQMUL | 0:4374caa1ef17 | 123 | while (true) { |
sebbarpar | 7:002686a28225 | 124 | d = tsi.readDistance() ; // Distance is between 0 and 39 |
WilliamMarshQMUL | 0:4374caa1ef17 | 125 | // When no touch --> 0 |
WilliamMarshQMUL | 0:4374caa1ef17 | 126 | // Left --> low value Right --> high value |
sebbarpar | 7:002686a28225 | 127 | switch (pos){ |
sebbarpar | 7:002686a28225 | 128 | case neutral: |
sebbarpar | 7:002686a28225 | 129 | if (d>3 && d<9){pos=lo; signals.set(lout);} //Set flags and change states |
sebbarpar | 7:002686a28225 | 130 | if (d>13 && d<19){pos=li; signals.set(lin);} |
sebbarpar | 7:002686a28225 | 131 | if (d>23 && d<29){pos=ri; signals.set(rin);} |
sebbarpar | 7:002686a28225 | 132 | if (d>33){pos=ro; signals.set(rout);} |
sebbarpar | 7:002686a28225 | 133 | break; |
sebbarpar | 7:002686a28225 | 134 | case lo: |
sebbarpar | 7:002686a28225 | 135 | if (d<3 || d>9) pos=neutral; |
sebbarpar | 7:002686a28225 | 136 | break; |
sebbarpar | 7:002686a28225 | 137 | case li: |
sebbarpar | 7:002686a28225 | 138 | if (d<13 || d>19) pos=neutral; |
sebbarpar | 7:002686a28225 | 139 | break; |
sebbarpar | 7:002686a28225 | 140 | case ri: |
sebbarpar | 7:002686a28225 | 141 | if (d<23 || d>29) pos=neutral; |
sebbarpar | 7:002686a28225 | 142 | break; |
sebbarpar | 7:002686a28225 | 143 | case ro: |
sebbarpar | 7:002686a28225 | 144 | if (d<33) pos=neutral; |
sebbarpar | 7:002686a28225 | 145 | break; |
sebbarpar | 7:002686a28225 | 146 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 147 | pc.printf("%d", d) ; |
WilliamMarshQMUL | 1:e6ffa08ad8bf | 148 | pc.putc(' ') ; |
sebbarpar | 7:002686a28225 | 149 | ThisThread::sleep_for(100) ; |
sebbarpar | 7:002686a28225 | 150 | } |
WilliamMarshQMUL | 0:4374caa1ef17 | 151 | } |