GIU\ZF

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

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?

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