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:
Wed Mar 30 04:01:53 2016 +0000
Revision:
6:572b9755f2c1
Parent:
5:4f2a072ed289
Child:
7:f09208f9a4f7
Further testing complete - Mail Queue must be modified as is not correct.

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 4:b4bcb329a930 3 #include "MCP23017.h"
sk398 4:b4bcb329a930 4 #include "WattBob_TextLCD.h"
sk398 4:b4bcb329a930 5
sk398 4:b4bcb329a930 6 #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT)
sk398 4:b4bcb329a930 7
sk398 4:b4bcb329a930 8 #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT)
sk398 4:b4bcb329a930 9
sk398 4:b4bcb329a930 10 MCP23017 *par_port;
sk398 4:b4bcb329a930 11 WattBob_TextLCD *lcd;
sk398 0:f7d6ed1dfe3e 12
sk398 1:cdf851858518 13 #define TRUE 1
sk398 1:cdf851858518 14 #define FALSE 0
sk398 1:cdf851858518 15
sk398 2:13a9394ba2e0 16 #define HIGH 1
sk398 2:13a9394ba2e0 17 #define LOW 0
sk398 2:13a9394ba2e0 18
sk398 2:13a9394ba2e0 19 // ============================================================================
sk398 2:13a9394ba2e0 20 // MBED Pin Assignments
sk398 2:13a9394ba2e0 21 // ============================================================================
sk398 1:cdf851858518 22 AnalogIn Brake(p19);
sk398 0:f7d6ed1dfe3e 23 AnalogIn Accelerometer(p20);
sk398 0:f7d6ed1dfe3e 24
sk398 1:cdf851858518 25 DigitalIn EngineState(p18);
sk398 1:cdf851858518 26 DigitalIn LeftIndicator(p17);
sk398 1:cdf851858518 27 DigitalIn RightIndicator(p16);
sk398 1:cdf851858518 28 DigitalIn SideLightIndicator(p15);
sk398 1:cdf851858518 29
sk398 1:cdf851858518 30 DigitalOut EngineStateInd(LED1);
sk398 1:cdf851858518 31 DigitalOut SideLightInd(LED2);
sk398 1:cdf851858518 32
sk398 1:cdf851858518 33 PwmOut LeftLightInd(LED3);
sk398 1:cdf851858518 34 PwmOut RightLightInd(LED4);
sk398 2:13a9394ba2e0 35 PwmOut OverSpeedInd(p22);
sk398 2:13a9394ba2e0 36
sk398 2:13a9394ba2e0 37 PwmOut AvSpeedWiper(p21);
sk398 2:13a9394ba2e0 38
sk398 4:b4bcb329a930 39 Serial PCConn(USBTX,USBRX);
sk398 4:b4bcb329a930 40
sk398 4:b4bcb329a930 41
sk398 2:13a9394ba2e0 42 // ============================================================================
sk398 2:13a9394ba2e0 43 // Global Data Structure Declerations
sk398 2:13a9394ba2e0 44 // ============================================================================
sk398 2:13a9394ba2e0 45 typedef struct
sk398 2:13a9394ba2e0 46 {
sk398 2:13a9394ba2e0 47 bool EngineState;
sk398 2:13a9394ba2e0 48 float RawAccelerometer;
sk398 2:13a9394ba2e0 49 float RawBraking;
sk398 2:13a9394ba2e0 50 } CarRawParams;
sk398 2:13a9394ba2e0 51
sk398 2:13a9394ba2e0 52 Mutex rawParamsMutex;
sk398 2:13a9394ba2e0 53 CarRawParams rawParams;
sk398 2:13a9394ba2e0 54
sk398 2:13a9394ba2e0 55
sk398 2:13a9394ba2e0 56 typedef struct
sk398 2:13a9394ba2e0 57 {
sk398 5:4f2a072ed289 58 float rawSpeed[3];
sk398 5:4f2a072ed289 59 int counter;
sk398 5:4f2a072ed289 60 } CarSpeed;
sk398 2:13a9394ba2e0 61
sk398 4:b4bcb329a930 62
sk398 5:4f2a072ed289 63 float lastSpeed;
sk398 5:4f2a072ed289 64 Mutex SpeedMutex;
sk398 5:4f2a072ed289 65 CarSpeed speedParams;
sk398 2:13a9394ba2e0 66
sk398 2:13a9394ba2e0 67
sk398 2:13a9394ba2e0 68 typedef struct
sk398 2:13a9394ba2e0 69 {
sk398 2:13a9394ba2e0 70 float AverageSpeed;
sk398 5:4f2a072ed289 71 float totalDistance;
sk398 2:13a9394ba2e0 72 } CarFilteredParams;
sk398 2:13a9394ba2e0 73
sk398 2:13a9394ba2e0 74 Mutex filteredParamsMutex;
sk398 2:13a9394ba2e0 75 CarFilteredParams filteredParams;
sk398 2:13a9394ba2e0 76
sk398 5:4f2a072ed289 77 float totalDistance;
sk398 4:b4bcb329a930 78
sk398 2:13a9394ba2e0 79 // ============================================================================
sk398 2:13a9394ba2e0 80 // Car Simulation
sk398 2:13a9394ba2e0 81 // ============================================================================
sk398 2:13a9394ba2e0 82
sk398 2:13a9394ba2e0 83 void CarSimulator(void const *arg)
sk398 2:13a9394ba2e0 84 {
sk398 4:b4bcb329a930 85 PCConn.printf("CarSim\r\n");
sk398 5:4f2a072ed289 86
sk398 5:4f2a072ed289 87 float newSpeed;
sk398 5:4f2a072ed289 88
sk398 2:13a9394ba2e0 89 rawParamsMutex.lock();
sk398 2:13a9394ba2e0 90 float currentAccelerometer = rawParams.RawAccelerometer;
sk398 5:4f2a072ed289 91 PCConn.printf("A: %f\r\n",currentAccelerometer);
sk398 2:13a9394ba2e0 92 float currentBrake = rawParams.RawBraking;
sk398 5:4f2a072ed289 93 PCConn.printf("B: %f\r\n",currentBrake);
sk398 2:13a9394ba2e0 94 bool currentEngineState = rawParams.EngineState;
sk398 5:4f2a072ed289 95 rawParamsMutex.unlock();
sk398 5:4f2a072ed289 96
sk398 5:4f2a072ed289 97 #define MAX_SPEED 100
sk398 5:4f2a072ed289 98 newSpeed = currentAccelerometer*MAX_SPEED*(1-currentBrake)*currentEngineState;
sk398 2:13a9394ba2e0 99
sk398 5:4f2a072ed289 100 SpeedMutex.lock();
sk398 5:4f2a072ed289 101 if(speedParams.counter > 2)
sk398 2:13a9394ba2e0 102 {
sk398 5:4f2a072ed289 103 speedParams.counter = 0;
sk398 4:b4bcb329a930 104 }
sk398 4:b4bcb329a930 105
sk398 5:4f2a072ed289 106 speedParams.rawSpeed[speedParams.counter] = newSpeed;
sk398 5:4f2a072ed289 107 SpeedMutex.unlock();
sk398 6:572b9755f2c1 108
sk398 5:4f2a072ed289 109 speedParams.counter = speedParams.counter++;
sk398 6:572b9755f2c1 110
sk398 2:13a9394ba2e0 111 }
sk398 2:13a9394ba2e0 112
sk398 2:13a9394ba2e0 113 // ============================================================================
sk398 2:13a9394ba2e0 114 // Control System Tasks
sk398 2:13a9394ba2e0 115 // ============================================================================
sk398 2:13a9394ba2e0 116
sk398 5:4f2a072ed289 117
sk398 2:13a9394ba2e0 118 void Task1_ReadRawData(void const *arg)
sk398 2:13a9394ba2e0 119 {
sk398 4:b4bcb329a930 120 PCConn.printf("Task1\r\n");
sk398 2:13a9394ba2e0 121 rawParamsMutex.lock();
sk398 2:13a9394ba2e0 122 rawParams.RawBraking = Brake.read();
sk398 2:13a9394ba2e0 123 rawParams.RawAccelerometer = Accelerometer.read();
sk398 2:13a9394ba2e0 124 rawParamsMutex.unlock();
sk398 2:13a9394ba2e0 125 }
sk398 2:13a9394ba2e0 126
sk398 2:13a9394ba2e0 127
sk398 2:13a9394ba2e0 128
sk398 2:13a9394ba2e0 129 void Task2_ReadEngineState(void const *arg)
sk398 2:13a9394ba2e0 130 {
sk398 4:b4bcb329a930 131 PCConn.printf("Task2\r\n");
sk398 4:b4bcb329a930 132 bool currentEngineState = EngineState.read();
sk398 2:13a9394ba2e0 133 rawParamsMutex.lock();
sk398 4:b4bcb329a930 134 rawParams.EngineState = currentEngineState;
sk398 2:13a9394ba2e0 135 rawParamsMutex.unlock();
sk398 2:13a9394ba2e0 136
sk398 2:13a9394ba2e0 137 if(currentEngineState)
sk398 2:13a9394ba2e0 138 {
sk398 2:13a9394ba2e0 139 EngineStateInd = HIGH;
sk398 2:13a9394ba2e0 140 }
sk398 2:13a9394ba2e0 141 else
sk398 2:13a9394ba2e0 142 {
sk398 2:13a9394ba2e0 143 EngineStateInd = LOW;
sk398 2:13a9394ba2e0 144 }
sk398 2:13a9394ba2e0 145 }
sk398 5:4f2a072ed289 146
sk398 5:4f2a072ed289 147
sk398 2:13a9394ba2e0 148
sk398 4:b4bcb329a930 149 void Task3_CalcAvSpeed(void const *arg)
sk398 4:b4bcb329a930 150 {
sk398 4:b4bcb329a930 151 PCConn.printf("Task3\r\n");
sk398 4:b4bcb329a930 152 float speedTotal = 0.0;
sk398 5:4f2a072ed289 153
sk398 4:b4bcb329a930 154 for(int num = 0; num < 3; num++)
sk398 4:b4bcb329a930 155 {
sk398 5:4f2a072ed289 156 speedTotal = speedTotal + speedParams.rawSpeed[num];
sk398 5:4f2a072ed289 157 PCConn.printf("Total: %f\r\n",speedTotal);
sk398 4:b4bcb329a930 158 }
sk398 2:13a9394ba2e0 159
sk398 4:b4bcb329a930 160 filteredParamsMutex.lock();
sk398 4:b4bcb329a930 161 filteredParams.AverageSpeed = (speedTotal/3);
sk398 5:4f2a072ed289 162 PCConn.printf("Av: %f\r\n",filteredParams.AverageSpeed);
sk398 4:b4bcb329a930 163 filteredParamsMutex.unlock();
sk398 4:b4bcb329a930 164 }
sk398 4:b4bcb329a930 165
sk398 5:4f2a072ed289 166
sk398 5:4f2a072ed289 167
sk398 4:b4bcb329a930 168 void Task4_UpdateRCWiper(void const *arg)
sk398 2:13a9394ba2e0 169 {
sk398 4:b4bcb329a930 170 PCConn.printf("Task4\r\n");
sk398 2:13a9394ba2e0 171 filteredParamsMutex.lock();
sk398 2:13a9394ba2e0 172 float currentAverageSpeed = filteredParams.AverageSpeed;
sk398 2:13a9394ba2e0 173 filteredParamsMutex.unlock();
sk398 2:13a9394ba2e0 174
sk398 5:4f2a072ed289 175 AvSpeedWiper.pulsewidth_us(1000+(10*currentAverageSpeed));
sk398 2:13a9394ba2e0 176 }
sk398 2:13a9394ba2e0 177
sk398 0:f7d6ed1dfe3e 178
sk398 0:f7d6ed1dfe3e 179
sk398 4:b4bcb329a930 180 void Task5_OverspeedLED(void const *arg)
sk398 0:f7d6ed1dfe3e 181 {
sk398 4:b4bcb329a930 182 PCConn.printf("Task5\r\n");
sk398 5:4f2a072ed289 183 SpeedMutex.lock();
sk398 5:4f2a072ed289 184 float currentInstSpeed = speedParams.rawSpeed[speedParams.counter];
sk398 5:4f2a072ed289 185 SpeedMutex.unlock();
sk398 4:b4bcb329a930 186
sk398 4:b4bcb329a930 187 if(currentInstSpeed > 70.0)
sk398 4:b4bcb329a930 188 {
sk398 4:b4bcb329a930 189 OverSpeedInd = HIGH;
sk398 1:cdf851858518 190 }
sk398 1:cdf851858518 191 else
sk398 1:cdf851858518 192 {
sk398 4:b4bcb329a930 193 OverSpeedInd = LOW;
sk398 4:b4bcb329a930 194 }
sk398 4:b4bcb329a930 195
sk398 4:b4bcb329a930 196 }
sk398 4:b4bcb329a930 197
sk398 4:b4bcb329a930 198
sk398 5:4f2a072ed289 199 void Task6_UpdateOdometer(void const *arg)
sk398 6:572b9755f2c1 200 {
sk398 5:4f2a072ed289 201 filteredParamsMutex.lock();
sk398 5:4f2a072ed289 202 float currentAverageSpeed = filteredParams.AverageSpeed;
sk398 5:4f2a072ed289 203 filteredParamsMutex.unlock();
sk398 5:4f2a072ed289 204
sk398 6:572b9755f2c1 205 totalDistance = totalDistance + (currentAverageSpeed*(0.5/3600));
sk398 6:572b9755f2c1 206
sk398 5:4f2a072ed289 207 lcd -> cls();
sk398 5:4f2a072ed289 208 lcd -> locate(0,0);
sk398 5:4f2a072ed289 209 lcd -> printf("Dist: %8.2f",totalDistance);
sk398 5:4f2a072ed289 210 lcd -> locate(1,0);
sk398 5:4f2a072ed289 211 lcd -> printf("Speed: %3.1f mph",currentAverageSpeed);
sk398 5:4f2a072ed289 212 }
sk398 5:4f2a072ed289 213
sk398 5:4f2a072ed289 214
sk398 5:4f2a072ed289 215
sk398 5:4f2a072ed289 216 void Task7_SendToMailQueue(void const *arg)
sk398 5:4f2a072ed289 217 {
sk398 5:4f2a072ed289 218
sk398 5:4f2a072ed289 219
sk398 5:4f2a072ed289 220 }
sk398 5:4f2a072ed289 221
sk398 5:4f2a072ed289 222
sk398 5:4f2a072ed289 223
sk398 5:4f2a072ed289 224 void Task8_DumpSerial(void const *arg)
sk398 5:4f2a072ed289 225 {
sk398 5:4f2a072ed289 226
sk398 5:4f2a072ed289 227
sk398 5:4f2a072ed289 228 }
sk398 5:4f2a072ed289 229
sk398 5:4f2a072ed289 230
sk398 5:4f2a072ed289 231
sk398 4:b4bcb329a930 232 void Task9_ReadSideLight(void const *arg)
sk398 4:b4bcb329a930 233 {
sk398 4:b4bcb329a930 234 PCConn.printf("Task9\r\n");
sk398 4:b4bcb329a930 235 if(SideLightIndicator)
sk398 4:b4bcb329a930 236 {
sk398 4:b4bcb329a930 237 SideLightInd = HIGH;
sk398 4:b4bcb329a930 238 }
sk398 4:b4bcb329a930 239 else
sk398 4:b4bcb329a930 240 {
sk398 4:b4bcb329a930 241 SideLightInd = LOW;
sk398 1:cdf851858518 242 }
sk398 1:cdf851858518 243 }
sk398 0:f7d6ed1dfe3e 244
sk398 2:13a9394ba2e0 245
sk398 2:13a9394ba2e0 246
sk398 4:b4bcb329a930 247 void Task10_ReadIndicatorLights(void const *arg)
sk398 0:f7d6ed1dfe3e 248 {
sk398 4:b4bcb329a930 249 PCConn.printf("Task10\r\n");
sk398 1:cdf851858518 250 // Left Indicator Only
sk398 1:cdf851858518 251 if(LeftIndicator && !RightIndicator)
sk398 1:cdf851858518 252 {
sk398 2:13a9394ba2e0 253 LeftLightInd.period(1.0);
sk398 2:13a9394ba2e0 254 LeftLightInd.pulsewidth(0.5);
sk398 2:13a9394ba2e0 255
sk398 2:13a9394ba2e0 256 RightLightInd.period(1.0);
sk398 2:13a9394ba2e0 257 RightLightInd.pulsewidth(0.0);
sk398 1:cdf851858518 258 }
sk398 1:cdf851858518 259
sk398 1:cdf851858518 260 // Right Indicator Only
sk398 1:cdf851858518 261 else if(!LeftIndicator && RightIndicator)
sk398 0:f7d6ed1dfe3e 262 {
sk398 2:13a9394ba2e0 263 LeftLightInd.period(1.0);
sk398 2:13a9394ba2e0 264 LeftLightInd.pulsewidth(0.0);
sk398 2:13a9394ba2e0 265
sk398 2:13a9394ba2e0 266 RightLightInd.period(1.0);
sk398 2:13a9394ba2e0 267 RightLightInd.pulsewidth(0.5);
sk398 1:cdf851858518 268 }
sk398 1:cdf851858518 269
sk398 1:cdf851858518 270 // Left and Right Indicators
sk398 1:cdf851858518 271 else if(LeftIndicator && RightIndicator)
sk398 1:cdf851858518 272 {
sk398 2:13a9394ba2e0 273 LeftLightInd.period(0.5);
sk398 2:13a9394ba2e0 274 RightLightInd.period(0.5);
sk398 0:f7d6ed1dfe3e 275
sk398 2:13a9394ba2e0 276 LeftLightInd.pulsewidth(0.25);
sk398 2:13a9394ba2e0 277 RightLightInd.pulsewidth(0.25);
sk398 2:13a9394ba2e0 278 }
sk398 2:13a9394ba2e0 279
sk398 2:13a9394ba2e0 280 else
sk398 2:13a9394ba2e0 281 {
sk398 2:13a9394ba2e0 282 LeftLightInd.period(1.0);
sk398 2:13a9394ba2e0 283 LeftLightInd.pulsewidth(0.0);
sk398 2:13a9394ba2e0 284
sk398 2:13a9394ba2e0 285 RightLightInd.period(1.0);
sk398 2:13a9394ba2e0 286 RightLightInd.pulsewidth(0.0);
sk398 0:f7d6ed1dfe3e 287 }
sk398 1:cdf851858518 288 }
sk398 3:8192bbde17b3 289
sk398 3:8192bbde17b3 290
sk398 3:8192bbde17b3 291 void InitSystem()
sk398 3:8192bbde17b3 292 {
sk398 4:b4bcb329a930 293 AvSpeedWiper.period_ms(20);
sk398 4:b4bcb329a930 294
sk398 4:b4bcb329a930 295 par_port->write_bit(1,BL_BIT); // turn LCD backlight ON
sk398 3:8192bbde17b3 296
sk398 3:8192bbde17b3 297 rawParams.EngineState = 0;
sk398 3:8192bbde17b3 298 rawParams.RawAccelerometer = 0.0;
sk398 3:8192bbde17b3 299 rawParams.RawBraking = 0.0;
sk398 4:b4bcb329a930 300
sk398 5:4f2a072ed289 301 speedParams.counter = 0;
sk398 5:4f2a072ed289 302 speedParams.rawSpeed[0] = 0.0;
sk398 5:4f2a072ed289 303 speedParams.rawSpeed[1] = 0.0;
sk398 5:4f2a072ed289 304 speedParams.rawSpeed[2] = 0.0;
sk398 3:8192bbde17b3 305
sk398 3:8192bbde17b3 306 filteredParams.AverageSpeed = 0.0;
sk398 6:572b9755f2c1 307
sk398 6:572b9755f2c1 308 totalDistance = 0.0;
sk398 4:b4bcb329a930 309 }
sk398 3:8192bbde17b3 310
sk398 3:8192bbde17b3 311
sk398 3:8192bbde17b3 312
sk398 2:13a9394ba2e0 313 // ============================================================================
sk398 2:13a9394ba2e0 314 // Entry Point Thread
sk398 2:13a9394ba2e0 315 // ============================================================================
sk398 1:cdf851858518 316
sk398 1:cdf851858518 317 int main()
sk398 1:cdf851858518 318 {
sk398 4:b4bcb329a930 319 par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip
sk398 4:b4bcb329a930 320 lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display
sk398 4:b4bcb329a930 321
sk398 4:b4bcb329a930 322 PCConn.baud(115200);
sk398 4:b4bcb329a930 323
sk398 3:8192bbde17b3 324 InitSystem();
sk398 3:8192bbde17b3 325
sk398 4:b4bcb329a930 326 RtosTimer CarSim(CarSimulator,osTimerPeriodic);
sk398 2:13a9394ba2e0 327
sk398 4:b4bcb329a930 328 RtosTimer Task1(Task1_ReadRawData,osTimerPeriodic);
sk398 4:b4bcb329a930 329 RtosTimer Task2(Task2_ReadEngineState,osTimerPeriodic);
sk398 4:b4bcb329a930 330 RtosTimer Task3(Task3_CalcAvSpeed,osTimerPeriodic);
sk398 4:b4bcb329a930 331 RtosTimer Task4(Task4_UpdateRCWiper,osTimerPeriodic);
sk398 4:b4bcb329a930 332 RtosTimer Task5(Task5_OverspeedLED,osTimerPeriodic);
sk398 5:4f2a072ed289 333 RtosTimer Task6(Task6_UpdateOdometer,osTimerPeriodic);
sk398 5:4f2a072ed289 334 RtosTimer Task7(Task7_SendToMailQueue,osTimerPeriodic);
sk398 5:4f2a072ed289 335 RtosTimer Task8(Task8_DumpSerial,osTimerPeriodic);
sk398 4:b4bcb329a930 336 RtosTimer Task9(Task9_ReadSideLight,osTimerPeriodic);
sk398 4:b4bcb329a930 337 RtosTimer Task10(Task10_ReadIndicatorLights,osTimerPeriodic);
sk398 4:b4bcb329a930 338
sk398 5:4f2a072ed289 339 CarSim.start(50); // 20Hz
sk398 5:4f2a072ed289 340 Task1.start(100); // 10Hz
sk398 5:4f2a072ed289 341 Task2.start(500); // 2Hz
sk398 5:4f2a072ed289 342 Task3.start(200); // 5Hz
sk398 5:4f2a072ed289 343 Task4.start(1000); // 1Hz
sk398 5:4f2a072ed289 344 Task5.start(2000); // 0.5Hz
sk398 5:4f2a072ed289 345 Task6.start(500); // 2Hz
sk398 5:4f2a072ed289 346 Task7.start(5000); // 0.2Hz
sk398 5:4f2a072ed289 347 Task8.start(20000); // 0.05Hz
sk398 5:4f2a072ed289 348 Task9.start(1000); // 1Hz
sk398 5:4f2a072ed289 349 Task10.start(2000); // 0.5Hz
sk398 1:cdf851858518 350
sk398 1:cdf851858518 351 Thread::wait(osWaitForever);
sk398 1:cdf851858518 352
sk398 0:f7d6ed1dfe3e 353
sk398 0:f7d6ed1dfe3e 354 }
sk398 0:f7d6ed1dfe3e 355
sk398 1:cdf851858518 356 //
sk398 1:cdf851858518 357 //
sk398 1:cdf851858518 358 //Mutex readvalues;
sk398 1:cdf851858518 359 //Semaphore read_s(1);
sk398 1:cdf851858518 360 //
sk398 1:cdf851858518 361 //Mail<value_t, 100> mail_box;
sk398 1:cdf851858518 362 //
sk398 1:cdf851858518 363 //
sk398 1:cdf851858518 364 //float readValue = 1.0;
sk398 1:cdf851858518 365 //
sk398 1:cdf851858518 366 //typedef struct
sk398 1:cdf851858518 367 //{
sk398 1:cdf851858518 368 // float AccelerationRaw;
sk398 1:cdf851858518 369 // float BrakeRaw;
sk398 1:cdf851858518 370 //} value_t;
sk398 1:cdf851858518 371 //
sk398 1:cdf851858518 372 //
sk398 1:cdf851858518 373 //void readAnalogPins(void const *args)
sk398 1:cdf851858518 374 //{
sk398 1:cdf851858518 375 // while(1)
sk398 1:cdf851858518 376 // {
sk398 1:cdf851858518 377 // value_t *ReadValue = mail_box.alloc();
sk398 1:cdf851858518 378 //
sk398 1:cdf851858518 379 // ReadValue -> AccelerationrRaw = Accelerometer.read();
sk398 1:cdf851858518 380 // ReadValue -> BrakeRaw = Brake.read();
sk398 1:cdf851858518 381 //
sk398 1:cdf851858518 382 // mail_box.put(ReadValue);
sk398 1:cdf851858518 383 // Thread::wait(100);
sk398 1:cdf851858518 384 // }
sk398 1:cdf851858518 385 //
sk398 1:cdf851858518 386 //}
sk398 1:cdf851858518 387 //
sk398 1:cdf851858518 388 //void sendToPC(void const *args)
sk398 1:cdf851858518 389 //{
sk398 1:cdf851858518 390 // while(1)
sk398 1:cdf851858518 391 // {
sk398 1:cdf851858518 392 // osEvent evt = mail_box.get();
sk398 1:cdf851858518 393 //
sk398 1:cdf851858518 394 // if(evt.status == osEventMail)
sk398 1:cdf851858518 395 // {
sk398 1:cdf851858518 396 // value_t *ReadValue = (value_t*)evt.value.p;
sk398 1:cdf851858518 397 // printf("Value: %1.3f\r\n", ReadValue-> vale);
sk398 1:cdf851858518 398 // mail_box.free(ReadValue);
sk398 1:cdf851858518 399 // }
sk398 1:cdf851858518 400 // Thread::wait(5000);
sk398 1:cdf851858518 401 // }
sk398 1:cdf851858518 402 //
sk398 1:cdf851858518 403 //}
sk398 1:cdf851858518 404 //
sk398 1:cdf851858518 405 //int main() {
sk398 1:cdf851858518 406 //
sk398 1:cdf851858518 407 // Thread thread_1(readData);
sk398 1:cdf851858518 408 // Thread thread_2(sendToPC);
sk398 1:cdf851858518 409 //
sk398 1:cdf851858518 410 // while(1) {
sk398 1:cdf851858518 411 //
sk398 1:cdf851858518 412 // myled = 1;
sk398 1:cdf851858518 413 // wait(0.2);
sk398 1:cdf851858518 414 // myled = 0;
sk398 1:cdf851858518 415 // wait(0.2);
sk398 1:cdf851858518 416 // }
sk398 1:cdf851858518 417 //}