Example software of using the mbed-rtos to control a simple vehicle's on board computer

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

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?

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