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

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

Revision:
8:6fad4bd89240
Parent:
7:f09208f9a4f7
Child:
9:c236eaaacf08
--- a/main.cpp	Wed Mar 30 09:35:10 2016 +0000
+++ b/main.cpp	Wed Mar 30 09:47:45 2016 +0000
@@ -27,23 +27,30 @@
 // ============================================================================
 // Define Statements
 // ============================================================================
+
+// LCD Definitions
 #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT)
 #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT)
 
-#define TRUE 1
-#define FALSE 0
-
+// General Logical Assignments
 #define HIGH 1
 #define LOW 0
 
+// Car Sim, Maximum Car Speed (mph)
+#define MAX_SPEED 100
+
 // ============================================================================
 // MBED Pin Assignments
 // ============================================================================
 
 // System Inputs
+// ----------------------------------------------------------------------------
+
+// Analog Channels
 AnalogIn Brake(p19);                        // Brake Pedal
 AnalogIn Accelerometer(p20);                // Accelerator Pedal
 
+// Digitial Channels
 DigitalIn EngineState(p18);                 // Engine State Switch
 DigitalIn LeftIndicator(p17);               // Left Indicator Switch
 DigitalIn RightIndicator(p16);              // Right Indicator Switch
@@ -51,17 +58,24 @@
 
 
 // System Outputs
+// ----------------------------------------------------------------------------
+
+// LED Indicators (Steady State)
 DigitalOut EngineStateInd(LED1);            // Engine State LED
 DigitalOut SideLightInd(LED2);              // Side Light LED
 
+// LED Indicators (Flashing)
 PwmOut LeftLightInd(LED3);                  // Left Indicator LED
 PwmOut RightLightInd(LED4);                 // Right Indicator LED
 PwmOut OverSpeedInd(p22);                   // OverSpeed LED
 
+// Servo Output
 PwmOut AvSpeedWiper(p21);                   // Average Speed Wiper
 
+// USB Connection to PC
 Serial PCConn(USBTX,USBRX);                 // Connection to PC
 
+// LCD Objects
 MCP23017 *par_port;                         // Object pointing to Expander
 WattBob_TextLCD *lcd;                       // LCD Connection
 
@@ -69,30 +83,33 @@
 // Global Data Structure Declerations
 // ============================================================================
 
-
+// Raw Data Structure
+// ----------------------------------------------------------------------------
 typedef struct
 {
     bool EngineState;
     float RawAccelerometer;
     float RawBraking;
-} CarRawParams;
+} CarRawData;
 
-Mutex rawParamsMutex;
-CarRawParams rawParams;
+Mutex rawDataMutex;
+CarRawData rawData;
 
-
+// Speed Data Structure
+// ----------------------------------------------------------------------------
 typedef struct
 {
     float rawSpeed[3];
     int counter;
-} CarSpeed;
-
+} CarSpeedData;
 
 float lastSpeed;
+
 Mutex SpeedMutex;
-CarSpeed speedParams;
+CarSpeedData speedData;
 
-
+// Filtered Data Structure
+// ----------------------------------------------------------------------------
 typedef struct
 {
     float AverageSpeed;
@@ -103,6 +120,8 @@
 
 float totalDistance;
 
+// Mail Queue Structure
+// ----------------------------------------------------------------------------
 typedef struct
 {
     float currentAverageSpeed;
@@ -115,38 +134,33 @@
 Mutex MailMutex;
 int MailQueueCounter;
 
+
 // ============================================================================
 // Car Simulation
 // ============================================================================
 
 void CarSimulator(void const *arg)
 {
-//    PCConn.printf("CarSim\r\n");
-    
     float newSpeed;
     
-    rawParamsMutex.lock();
-    float currentAccelerometer = rawParams.RawAccelerometer;
-//    PCConn.printf("A: %f\r\n",currentAccelerometer);
-    float currentBrake = rawParams.RawBraking;
-//    PCConn.printf("B: %f\r\n",currentBrake);
-    bool currentEngineState = rawParams.EngineState;
-    rawParamsMutex.unlock();   
+    rawDataMutex.lock();
+    float currentAccelerometer = rawData.RawAccelerometer;
+    float currentBrake = rawData.RawBraking;
+    bool currentEngineState = rawData.EngineState;
+    rawDataMutex.unlock();   
 
-#define MAX_SPEED 100
     newSpeed = currentAccelerometer*MAX_SPEED*(1-currentBrake)*currentEngineState;
     
     SpeedMutex.lock();
-    if(speedParams.counter > 2)
+    if(speedData.counter > 2)
     {
-        speedParams.counter = 0;
+        speedData.counter = 0;
     }
     
-    speedParams.rawSpeed[speedParams.counter] = newSpeed;
+    speedData.rawSpeed[speedData.counter] = newSpeed;
     SpeedMutex.unlock();
         
-    speedParams.counter = speedParams.counter++;
- 
+    speedData.counter = speedData.counter++;
 }
 
 // ============================================================================
@@ -157,10 +171,10 @@
 void Task1_ReadRawData(void const *arg)
 {
 //      PCConn.printf("Task1\r\n");
-      rawParamsMutex.lock();
-      rawParams.RawBraking = Brake.read();
-      rawParams.RawAccelerometer = Accelerometer.read();
-      rawParamsMutex.unlock();
+      rawDataMutex.lock();
+      rawData.RawBraking = Brake.read();
+      rawData.RawAccelerometer = Accelerometer.read();
+      rawDataMutex.unlock();
 }
 
 
@@ -169,9 +183,9 @@
 {
 //    PCConn.printf("Task2\r\n");
     bool currentEngineState = EngineState.read();
-    rawParamsMutex.lock();
-    rawParams.EngineState = currentEngineState;
-    rawParamsMutex.unlock();
+    rawDataMutex.lock();
+    rawData.EngineState = currentEngineState;
+    rawDataMutex.unlock();
     
     if(currentEngineState)
     {
@@ -192,7 +206,7 @@
     
     for(int num = 0; num < 3; num++)
     {
-        speedTotal = speedTotal + speedParams.rawSpeed[num];
+        speedTotal = speedTotal + speedData.rawSpeed[num];
 //        PCConn.printf("Total: %f\r\n",speedTotal);
     }
 
@@ -220,7 +234,7 @@
 {
 //    PCConn.printf("Task5\r\n");
     SpeedMutex.lock();
-    float currentInstSpeed = speedParams.rawSpeed[speedParams.counter];
+    float currentInstSpeed = speedData.rawSpeed[speedData.counter];
     SpeedMutex.unlock();
     
     if(currentInstSpeed > 70.0)
@@ -257,10 +271,10 @@
     float currentAverageSpeed = filteredParams.AverageSpeed;
     filteredParamsMutex.unlock();
     
-    rawParamsMutex.lock();
-    float currentAccelerometer = rawParams.RawAccelerometer;
-    float currentBrake = rawParams.RawBraking;
-    rawParamsMutex.unlock();  
+    rawDataMutex.lock();
+    float currentAccelerometer = rawData.RawAccelerometer;
+    float currentBrake = rawData.RawBraking;
+    rawDataMutex.unlock();  
     
     PCDump_t *currentPCDump = Memory_Dump.alloc();
     currentPCDump -> currentAverageSpeed = currentAverageSpeed;
@@ -370,14 +384,14 @@
     
     par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
 
-    rawParams.EngineState = 0;
-    rawParams.RawAccelerometer = 0.0;
-    rawParams.RawBraking = 0.0;
+    rawData.EngineState = 0;
+    rawData.RawAccelerometer = 0.0;
+    rawData.RawBraking = 0.0;
 
-    speedParams.counter = 0;
-    speedParams.rawSpeed[0] = 0.0;
-    speedParams.rawSpeed[1] = 0.0;
-    speedParams.rawSpeed[2] = 0.0;
+    speedData.counter = 0;
+    speedData.rawSpeed[0] = 0.0;
+    speedData.rawSpeed[1] = 0.0;
+    speedData.rawSpeed[2] = 0.0;
     
     filteredParams.AverageSpeed = 0.0;