GIU\ZF
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
Fork of rtos_basic by
tasks/core.h@12:90b5d8eae5ec, 2018-03-27 (annotated)
- Committer:
- ihexx
- Date:
- Tue Mar 27 14:35:09 2018 +0000
- Revision:
- 12:90b5d8eae5ec
- Child:
- 13:ab52f46c98ab
core loop functional.; Display task tested.; Debug frameowrk conceptualised.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ihexx | 12:90b5d8eae5ec | 1 | #pragma once |
ihexx | 12:90b5d8eae5ec | 2 | |
ihexx | 12:90b5d8eae5ec | 3 | #include "mbed.h" |
ihexx | 12:90b5d8eae5ec | 4 | #include "rtos.h" |
ihexx | 12:90b5d8eae5ec | 5 | #include "MCP23017.h" |
ihexx | 12:90b5d8eae5ec | 6 | #include "WattBob_TextLCD.h" |
ihexx | 12:90b5d8eae5ec | 7 | #include <string> |
ihexx | 12:90b5d8eae5ec | 8 | #include <sstream> |
ihexx | 12:90b5d8eae5ec | 9 | |
ihexx | 12:90b5d8eae5ec | 10 | //Compile Flags |
ihexx | 12:90b5d8eae5ec | 11 | #define DEBUG_MODE 1 |
ihexx | 12:90b5d8eae5ec | 12 | |
ihexx | 12:90b5d8eae5ec | 13 | //Inputs------------------------- |
ihexx | 12:90b5d8eae5ec | 14 | #define PORT_BRAKE p20 |
ihexx | 12:90b5d8eae5ec | 15 | #define PORT_ACCEL p19 |
ihexx | 12:90b5d8eae5ec | 16 | #define PORT_IGNITION p21 |
ihexx | 12:90b5d8eae5ec | 17 | #define PORT_TURN_SIGNAL_SWITCH_LEFT p18 |
ihexx | 12:90b5d8eae5ec | 18 | #define PORT_TURN_SIGNAL_SWITCH_RIGHT p17 |
ihexx | 12:90b5d8eae5ec | 19 | //Outputs ---------------- |
ihexx | 12:90b5d8eae5ec | 20 | #define PORT_REDBOX_LED1 p22 |
ihexx | 12:90b5d8eae5ec | 21 | #define PORT_REDBOX_LED2 p23 |
ihexx | 12:90b5d8eae5ec | 22 | |
ihexx | 12:90b5d8eae5ec | 23 | #define PORT_SIDE_LIGHTS p5 |
ihexx | 12:90b5d8eae5ec | 24 | #define IGNITION_LED p6 |
ihexx | 12:90b5d8eae5ec | 25 | #define PORT_TURN_SIGNAL_LED_LEFT p25 |
ihexx | 12:90b5d8eae5ec | 26 | #define PORT_TURN_SIGNAL_LED_RIGHT p26 |
ihexx | 12:90b5d8eae5ec | 27 | |
ihexx | 12:90b5d8eae5ec | 28 | //#define PORT_SIDE_LIGHTS LED1 |
ihexx | 12:90b5d8eae5ec | 29 | //#define IGNITION_LED LED4 |
ihexx | 12:90b5d8eae5ec | 30 | //#define PORT_TURN_SIGNAL_LED_LEFT LED2 |
ihexx | 12:90b5d8eae5ec | 31 | //#define PORT_TURN_SIGNAL_LED_RIGHT LED3 |
ihexx | 12:90b5d8eae5ec | 32 | |
ihexx | 12:90b5d8eae5ec | 33 | namespace runTimeParams{ |
ihexx | 12:90b5d8eae5ec | 34 | extern Mutex liveAccess; |
ihexx | 12:90b5d8eae5ec | 35 | extern float brakeForce; |
ihexx | 12:90b5d8eae5ec | 36 | extern float accelForce; |
ihexx | 12:90b5d8eae5ec | 37 | extern float avgSpeed; |
ihexx | 12:90b5d8eae5ec | 38 | extern float odometer; |
ihexx | 12:90b5d8eae5ec | 39 | #if DEBUG_MODE |
ihexx | 12:90b5d8eae5ec | 40 | extern string debugLog; |
ihexx | 12:90b5d8eae5ec | 41 | #endif |
ihexx | 12:90b5d8eae5ec | 42 | } |
ihexx | 12:90b5d8eae5ec | 43 | |
ihexx | 12:90b5d8eae5ec | 44 | namespace carSimulator{ |
ihexx | 12:90b5d8eae5ec | 45 | //simplified model of the car to allow the control system to operate |
ihexx | 12:90b5d8eae5ec | 46 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 47 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 48 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 49 | } |
ihexx | 12:90b5d8eae5ec | 50 | |
ihexx | 12:90b5d8eae5ec | 51 | namespace mailData{ |
ihexx | 12:90b5d8eae5ec | 52 | typedef struct{ |
ihexx | 12:90b5d8eae5ec | 53 | float speed; |
ihexx | 12:90b5d8eae5ec | 54 | float accel; |
ihexx | 12:90b5d8eae5ec | 55 | float brake; |
ihexx | 12:90b5d8eae5ec | 56 | } mail_t; |
ihexx | 12:90b5d8eae5ec | 57 | extern Mail<mail_t, 100> mailBox; |
ihexx | 12:90b5d8eae5ec | 58 | } |
ihexx | 12:90b5d8eae5ec | 59 | |
ihexx | 12:90b5d8eae5ec | 60 | |
ihexx | 12:90b5d8eae5ec | 61 | namespace getControls{ |
ihexx | 12:90b5d8eae5ec | 62 | //Read brake and accelerator values from variable resistors |
ihexx | 12:90b5d8eae5ec | 63 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 64 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 65 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 66 | |
ihexx | 12:90b5d8eae5ec | 67 | } |
ihexx | 12:90b5d8eae5ec | 68 | |
ihexx | 12:90b5d8eae5ec | 69 | namespace getIgnition{ |
ihexx | 12:90b5d8eae5ec | 70 | //Read engine on/off switch and show current state on a LED |
ihexx | 12:90b5d8eae5ec | 71 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 72 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 73 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 74 | } |
ihexx | 12:90b5d8eae5ec | 75 | |
ihexx | 12:90b5d8eae5ec | 76 | namespace filterSpeed{ |
ihexx | 12:90b5d8eae5ec | 77 | //Filter speed with averaging filter |
ihexx | 12:90b5d8eae5ec | 78 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 79 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 80 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 81 | } |
ihexx | 12:90b5d8eae5ec | 82 | |
ihexx | 12:90b5d8eae5ec | 83 | namespace brakeIndicator{ |
ihexx | 12:90b5d8eae5ec | 84 | //Read brake and accelerator values from variable resistors |
ihexx | 12:90b5d8eae5ec | 85 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 86 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 87 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 88 | } |
ihexx | 12:90b5d8eae5ec | 89 | |
ihexx | 12:90b5d8eae5ec | 90 | namespace speedIndicator{ |
ihexx | 12:90b5d8eae5ec | 91 | //Read brake and accelerator values from variable resistors |
ihexx | 12:90b5d8eae5ec | 92 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 93 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 94 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 95 | } |
ihexx | 12:90b5d8eae5ec | 96 | |
ihexx | 12:90b5d8eae5ec | 97 | namespace sideLights{ |
ihexx | 12:90b5d8eae5ec | 98 | //Read brake and accelerator values from variable resistors |
ihexx | 12:90b5d8eae5ec | 99 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 100 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 101 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 102 | } |
ihexx | 12:90b5d8eae5ec | 103 | |
ihexx | 12:90b5d8eae5ec | 104 | namespace turnSignal{ |
ihexx | 12:90b5d8eae5ec | 105 | //Read brake and accelerator values from variable resistors |
ihexx | 12:90b5d8eae5ec | 106 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 107 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 108 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 109 | } |
ihexx | 12:90b5d8eae5ec | 110 | |
ihexx | 12:90b5d8eae5ec | 111 | namespace sendMail{ |
ihexx | 12:90b5d8eae5ec | 112 | //Send speed, accelerometer and brake values to a 100 element |
ihexx | 12:90b5d8eae5ec | 113 | //MAIL queue |
ihexx | 12:90b5d8eae5ec | 114 | extern Thread thread; |
ihexx | 12:90b5d8eae5ec | 115 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 116 | void runTask(); |
ihexx | 12:90b5d8eae5ec | 117 | } |
ihexx | 12:90b5d8eae5ec | 118 | |
ihexx | 12:90b5d8eae5ec | 119 | namespace display{ |
ihexx | 12:90b5d8eae5ec | 120 | //Display on MBED text display: • odometer value • average speed |
ihexx | 12:90b5d8eae5ec | 121 | extern MCP23017 *port; |
ihexx | 12:90b5d8eae5ec | 122 | extern WattBob_TextLCD *lcd; |
ihexx | 12:90b5d8eae5ec | 123 | extern const float freq; |
ihexx | 12:90b5d8eae5ec | 124 | |
ihexx | 12:90b5d8eae5ec | 125 | void init(); |
ihexx | 12:90b5d8eae5ec | 126 | static inline void hotLoop(){ |
ihexx | 12:90b5d8eae5ec | 127 | lcd->cls(); |
ihexx | 12:90b5d8eae5ec | 128 | |
ihexx | 12:90b5d8eae5ec | 129 | runTimeParams::liveAccess.lock(); |
ihexx | 12:90b5d8eae5ec | 130 | float odometer = runTimeParams::odometer; |
ihexx | 12:90b5d8eae5ec | 131 | float avgSpeed = runTimeParams::avgSpeed; |
ihexx | 12:90b5d8eae5ec | 132 | runTimeParams::liveAccess.unlock(); |
ihexx | 12:90b5d8eae5ec | 133 | |
ihexx | 12:90b5d8eae5ec | 134 | lcd->locate(0,0); //located col, row. |
ihexx | 12:90b5d8eae5ec | 135 | lcd->printf("Odo=%.2f",odometer); |
ihexx | 12:90b5d8eae5ec | 136 | |
ihexx | 12:90b5d8eae5ec | 137 | lcd->locate(1,0); //located col, row. |
ihexx | 12:90b5d8eae5ec | 138 | lcd->printf("Speed=%.2f",avgSpeed); |
ihexx | 12:90b5d8eae5ec | 139 | } |
ihexx | 12:90b5d8eae5ec | 140 | } |
ihexx | 12:90b5d8eae5ec | 141 | |
ihexx | 12:90b5d8eae5ec | 142 | template <typename T> |
ihexx | 12:90b5d8eae5ec | 143 | static inline std::string to_string(T value) |
ihexx | 12:90b5d8eae5ec | 144 | { |
ihexx | 12:90b5d8eae5ec | 145 | std::ostringstream os ; |
ihexx | 12:90b5d8eae5ec | 146 | os << value ; |
ihexx | 12:90b5d8eae5ec | 147 | return os.str() ; |
ihexx | 12:90b5d8eae5ec | 148 | } |