![](/media/cache/profiles/8138ec4f8dbf9991f277b91dd462de7d.jpg.50x50_q85.png)
Example software of using the mbed-rtos to control a simple vehicle's on board computer
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
main.cpp@1:cdf851858518, 2016-03-29 (annotated)
- Committer:
- sk398
- Date:
- Tue Mar 29 19:25:06 2016 +0000
- Revision:
- 1:cdf851858518
- Parent:
- 0:f7d6ed1dfe3e
- Child:
- 2:13a9394ba2e0
Tasks 8 & 9 Implemented
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sk398 | 0:f7d6ed1dfe3e | 1 | #include "mbed.h" |
sk398 | 0:f7d6ed1dfe3e | 2 | #include "rtos.h" |
sk398 | 0:f7d6ed1dfe3e | 3 | |
sk398 | 1:cdf851858518 | 4 | #define TRUE 1 |
sk398 | 1:cdf851858518 | 5 | #define FALSE 0 |
sk398 | 1:cdf851858518 | 6 | |
sk398 | 1:cdf851858518 | 7 | AnalogIn Brake(p19); |
sk398 | 0:f7d6ed1dfe3e | 8 | AnalogIn Accelerometer(p20); |
sk398 | 0:f7d6ed1dfe3e | 9 | |
sk398 | 1:cdf851858518 | 10 | DigitalIn EngineState(p18); |
sk398 | 1:cdf851858518 | 11 | DigitalIn LeftIndicator(p17); |
sk398 | 1:cdf851858518 | 12 | DigitalIn RightIndicator(p16); |
sk398 | 1:cdf851858518 | 13 | DigitalIn SideLightIndicator(p15); |
sk398 | 1:cdf851858518 | 14 | |
sk398 | 1:cdf851858518 | 15 | DigitalOut EngineStateInd(LED1); |
sk398 | 1:cdf851858518 | 16 | DigitalOut SideLightInd(LED2); |
sk398 | 1:cdf851858518 | 17 | |
sk398 | 1:cdf851858518 | 18 | PwmOut LeftLightInd(LED3); |
sk398 | 1:cdf851858518 | 19 | PwmOut RightLightInd(LED4); |
sk398 | 1:cdf851858518 | 20 | PwmOut OverSpeedInd(p21); |
sk398 | 0:f7d6ed1dfe3e | 21 | |
sk398 | 0:f7d6ed1dfe3e | 22 | |
sk398 | 1:cdf851858518 | 23 | void Task8_ReadSideLight(void const *arg) |
sk398 | 0:f7d6ed1dfe3e | 24 | { |
sk398 | 1:cdf851858518 | 25 | if(SideLightIndicator) |
sk398 | 1:cdf851858518 | 26 | { |
sk398 | 1:cdf851858518 | 27 | SideLightInd = TRUE; |
sk398 | 1:cdf851858518 | 28 | } |
sk398 | 1:cdf851858518 | 29 | else |
sk398 | 1:cdf851858518 | 30 | { |
sk398 | 1:cdf851858518 | 31 | SideLightInd = FALSE; |
sk398 | 1:cdf851858518 | 32 | } |
sk398 | 1:cdf851858518 | 33 | } |
sk398 | 0:f7d6ed1dfe3e | 34 | |
sk398 | 1:cdf851858518 | 35 | void Task9_ReadIndicatorLights(void const *arg) |
sk398 | 0:f7d6ed1dfe3e | 36 | { |
sk398 | 1:cdf851858518 | 37 | // Left Indicator Only |
sk398 | 1:cdf851858518 | 38 | if(LeftIndicator && !RightIndicator) |
sk398 | 1:cdf851858518 | 39 | { |
sk398 | 1:cdf851858518 | 40 | LeftIndicator.period(1.0); |
sk398 | 1:cdf851858518 | 41 | LeftIndicator.pulsewidth(0.5); |
sk398 | 1:cdf851858518 | 42 | } |
sk398 | 1:cdf851858518 | 43 | |
sk398 | 1:cdf851858518 | 44 | // Right Indicator Only |
sk398 | 1:cdf851858518 | 45 | else if(!LeftIndicator && RightIndicator) |
sk398 | 0:f7d6ed1dfe3e | 46 | { |
sk398 | 1:cdf851858518 | 47 | RightIndicator.period(1.0); |
sk398 | 1:cdf851858518 | 48 | RightIndicator.pulsewidth(0.5); |
sk398 | 1:cdf851858518 | 49 | } |
sk398 | 1:cdf851858518 | 50 | |
sk398 | 1:cdf851858518 | 51 | // Left and Right Indicators |
sk398 | 1:cdf851858518 | 52 | else if(LeftIndicator && RightIndicator) |
sk398 | 1:cdf851858518 | 53 | { |
sk398 | 1:cdf851858518 | 54 | LeftIndicator.period(0.5); |
sk398 | 1:cdf851858518 | 55 | RightIndicator.period(0.5); |
sk398 | 0:f7d6ed1dfe3e | 56 | |
sk398 | 1:cdf851858518 | 57 | LeftIndicator.pulsewidth(0.25); |
sk398 | 1:cdf851858518 | 58 | RightIndicator.pulsewidth(0.25); |
sk398 | 0:f7d6ed1dfe3e | 59 | } |
sk398 | 1:cdf851858518 | 60 | } |
sk398 | 1:cdf851858518 | 61 | |
sk398 | 1:cdf851858518 | 62 | |
sk398 | 1:cdf851858518 | 63 | int main() |
sk398 | 1:cdf851858518 | 64 | { |
sk398 | 1:cdf851858518 | 65 | |
sk398 | 1:cdf851858518 | 66 | RtosTimer Task8(Task8_ReadSideLight,osTimerPeriodic); |
sk398 | 1:cdf851858518 | 67 | RtosTimer Task9(Task9_ReadIndicatorLights,osTimerPeriodic); |
sk398 | 1:cdf851858518 | 68 | |
sk398 | 1:cdf851858518 | 69 | Task8.start(1000); |
sk398 | 1:cdf851858518 | 70 | Task9.start(2000); |
sk398 | 1:cdf851858518 | 71 | |
sk398 | 1:cdf851858518 | 72 | Thread::wait(osWaitForever); |
sk398 | 1:cdf851858518 | 73 | |
sk398 | 0:f7d6ed1dfe3e | 74 | |
sk398 | 0:f7d6ed1dfe3e | 75 | } |
sk398 | 0:f7d6ed1dfe3e | 76 | |
sk398 | 1:cdf851858518 | 77 | // |
sk398 | 1:cdf851858518 | 78 | // |
sk398 | 1:cdf851858518 | 79 | //Mutex readvalues; |
sk398 | 1:cdf851858518 | 80 | //Semaphore read_s(1); |
sk398 | 1:cdf851858518 | 81 | // |
sk398 | 1:cdf851858518 | 82 | //Mail<value_t, 100> mail_box; |
sk398 | 1:cdf851858518 | 83 | // |
sk398 | 1:cdf851858518 | 84 | // |
sk398 | 1:cdf851858518 | 85 | //float readValue = 1.0; |
sk398 | 1:cdf851858518 | 86 | // |
sk398 | 1:cdf851858518 | 87 | //typedef struct |
sk398 | 1:cdf851858518 | 88 | //{ |
sk398 | 1:cdf851858518 | 89 | // float AccelerationRaw; |
sk398 | 1:cdf851858518 | 90 | // float BrakeRaw; |
sk398 | 1:cdf851858518 | 91 | //} value_t; |
sk398 | 1:cdf851858518 | 92 | // |
sk398 | 1:cdf851858518 | 93 | // |
sk398 | 1:cdf851858518 | 94 | //void readAnalogPins(void const *args) |
sk398 | 1:cdf851858518 | 95 | //{ |
sk398 | 1:cdf851858518 | 96 | // while(1) |
sk398 | 1:cdf851858518 | 97 | // { |
sk398 | 1:cdf851858518 | 98 | // value_t *ReadValue = mail_box.alloc(); |
sk398 | 1:cdf851858518 | 99 | // |
sk398 | 1:cdf851858518 | 100 | // ReadValue -> AccelerationrRaw = Accelerometer.read(); |
sk398 | 1:cdf851858518 | 101 | // ReadValue -> BrakeRaw = Brake.read(); |
sk398 | 1:cdf851858518 | 102 | // |
sk398 | 1:cdf851858518 | 103 | // mail_box.put(ReadValue); |
sk398 | 1:cdf851858518 | 104 | // Thread::wait(100); |
sk398 | 1:cdf851858518 | 105 | // } |
sk398 | 1:cdf851858518 | 106 | // |
sk398 | 1:cdf851858518 | 107 | //} |
sk398 | 1:cdf851858518 | 108 | // |
sk398 | 1:cdf851858518 | 109 | //void sendToPC(void const *args) |
sk398 | 1:cdf851858518 | 110 | //{ |
sk398 | 1:cdf851858518 | 111 | // while(1) |
sk398 | 1:cdf851858518 | 112 | // { |
sk398 | 1:cdf851858518 | 113 | // osEvent evt = mail_box.get(); |
sk398 | 1:cdf851858518 | 114 | // |
sk398 | 1:cdf851858518 | 115 | // if(evt.status == osEventMail) |
sk398 | 1:cdf851858518 | 116 | // { |
sk398 | 1:cdf851858518 | 117 | // value_t *ReadValue = (value_t*)evt.value.p; |
sk398 | 1:cdf851858518 | 118 | // printf("Value: %1.3f\r\n", ReadValue-> vale); |
sk398 | 1:cdf851858518 | 119 | // mail_box.free(ReadValue); |
sk398 | 1:cdf851858518 | 120 | // } |
sk398 | 1:cdf851858518 | 121 | // Thread::wait(5000); |
sk398 | 1:cdf851858518 | 122 | // } |
sk398 | 1:cdf851858518 | 123 | // |
sk398 | 1:cdf851858518 | 124 | //} |
sk398 | 1:cdf851858518 | 125 | // |
sk398 | 1:cdf851858518 | 126 | //int main() { |
sk398 | 1:cdf851858518 | 127 | // |
sk398 | 1:cdf851858518 | 128 | // Thread thread_1(readData); |
sk398 | 1:cdf851858518 | 129 | // Thread thread_2(sendToPC); |
sk398 | 1:cdf851858518 | 130 | // |
sk398 | 1:cdf851858518 | 131 | // while(1) { |
sk398 | 1:cdf851858518 | 132 | // |
sk398 | 1:cdf851858518 | 133 | // myled = 1; |
sk398 | 1:cdf851858518 | 134 | // wait(0.2); |
sk398 | 1:cdf851858518 | 135 | // myled = 0; |
sk398 | 1:cdf851858518 | 136 | // wait(0.2); |
sk398 | 1:cdf851858518 | 137 | // } |
sk398 | 1:cdf851858518 | 138 | //} |