Example software of using the mbed-rtos to control a simple vehicle's on board computer
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
Diff: main.cpp
- Revision:
- 1:cdf851858518
- Parent:
- 0:f7d6ed1dfe3e
- Child:
- 2:13a9394ba2e0
diff -r f7d6ed1dfe3e -r cdf851858518 main.cpp --- a/main.cpp Mon Mar 21 13:57:22 2016 +0000 +++ b/main.cpp Tue Mar 29 19:25:06 2016 +0000 @@ -1,67 +1,138 @@ #include "mbed.h" #include "rtos.h" -DigitalOut myled(LED1); +#define TRUE 1 +#define FALSE 0 + +AnalogIn Brake(p19); AnalogIn Accelerometer(p20); -Mutex readvalues; -Semaphore read_s(1); +DigitalIn EngineState(p18); +DigitalIn LeftIndicator(p17); +DigitalIn RightIndicator(p16); +DigitalIn SideLightIndicator(p15); + +DigitalOut EngineStateInd(LED1); +DigitalOut SideLightInd(LED2); + +PwmOut LeftLightInd(LED3); +PwmOut RightLightInd(LED4); +PwmOut OverSpeedInd(p21); -float readValue = 1.0; - -typedef struct +void Task8_ReadSideLight(void const *arg) { - float value; -} value_t; + if(SideLightIndicator) + { + SideLightInd = TRUE; + } + else + { + SideLightInd = FALSE; + } +} -void thread1(void const *args) +void Task9_ReadIndicatorLights(void const *arg) { - while(1) + // Left Indicator Only + if(LeftIndicator && !RightIndicator) + { + LeftIndicator.period(1.0); + LeftIndicator.pulsewidth(0.5); + } + + // Right Indicator Only + else if(!LeftIndicator && RightIndicator) { -// read_s.wait(); - value_t *mail = mail_box.alloc(); + RightIndicator.period(1.0); + RightIndicator.pulsewidth(0.5); + } + + // Left and Right Indicators + else if(LeftIndicator && RightIndicator) + { + LeftIndicator.period(0.5); + RightIndicator.period(0.5); - readvalues.lock(); - value_t -> value = Accelerometer.read(); - readvalues.unlock(); -// read_s.release(); -// printf("hello-1 = %1.3f\r\n",readValue); - Thread::wait(1000); + LeftIndicator.pulsewidth(0.25); + RightIndicator.pulsewidth(0.25); } +} + + +int main() +{ + + RtosTimer Task8(Task8_ReadSideLight,osTimerPeriodic); + RtosTimer Task9(Task9_ReadIndicatorLights,osTimerPeriodic); + + Task8.start(1000); + Task9.start(2000); + + Thread::wait(osWaitForever); + } -void thread2(void const *args) -{ - while(1) - { - readvalues.lock(); -// read_s.wait(); - printf("readValue = %s\r\n",(const char*)args); -// read_s.release(); - readvalues.unlock(); - Thread::wait(500); - } - -} - -int main() { - char array[10]; - - Thread thread_1(thread1); - Thread thread_2(thread2,(void *)array); - - while(1) { - - readvalues.lock(); - int var = sprintf(array,"%1.3f",readValue); - printf("%s\r\n",array); - readvalues.unlock(); - - myled = 1; - wait(0.2); - myled = 0; - wait(0.2); - } -} +// +// +//Mutex readvalues; +//Semaphore read_s(1); +// +//Mail<value_t, 100> mail_box; +// +// +//float readValue = 1.0; +// +//typedef struct +//{ +// float AccelerationRaw; +// float BrakeRaw; +//} value_t; +// +// +//void readAnalogPins(void const *args) +//{ +// while(1) +// { +// value_t *ReadValue = mail_box.alloc(); +// +// ReadValue -> AccelerationrRaw = Accelerometer.read(); +// ReadValue -> BrakeRaw = Brake.read(); +// +// mail_box.put(ReadValue); +// Thread::wait(100); +// } +// +//} +// +//void sendToPC(void const *args) +//{ +// while(1) +// { +// osEvent evt = mail_box.get(); +// +// if(evt.status == osEventMail) +// { +// value_t *ReadValue = (value_t*)evt.value.p; +// printf("Value: %1.3f\r\n", ReadValue-> vale); +// mail_box.free(ReadValue); +// } +// Thread::wait(5000); +// } +// +//} +// +//int main() { +// +// Thread thread_1(readData); +// Thread thread_2(sendToPC); +// +// while(1) { +// +// myled = 1; +// wait(0.2); +// myled = 0; +// wait(0.2); +// } +//}